2011-07-16 2 views
0

я получаю следующее сообщение об ошибке, когда я звоню ContactUser.new:Ошибка синтаксиса на бестабличные модели

contact_user.rb:13: syntax error, unexpected ')', expecting '=' 
contact_user.rb:19: syntax error, unexpected kEND, expecting $end 

Обычно ошибка, как это довольно очевидно, но я не могу показаться, чтобы определить причину. Любая помощь будет оценена по достоинству.

class ContactUser < ActiveRecord::Base 

    include Tableless 

    column :name, :string 
    column :email, :string 
    column :category, :string 
    column :message, :text 
    column :recipient, :string 

    validates_presence_of :name, :email, :category, :message, :recipient 

    def self.create_from_params(params={}, recipient) 
    params[:message].encode!('US-ASCII', :undef => :replace) # re-encode message in US ASCII to ensure mailer works with it 

    ContactUser.create(:name => params[:name], :email => params[:email], :category => params[:category], :message => params[:message], :recipient => recipient) 
    end 

end 

module Tableless 

    def self.included(base) 
    base.extend(ClassMethods) 
    end 

    module ClassMethods 

    def columns() @columns ||= []; end 

    def column(name, sql_type=nil, default=nil, null=true) 
     columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null) 
    end 

    end 

    def save(validate=true) 
    validate ? valid? : true 
    end 

end 

ответ

4

Вот ваша проблема:

def self.create_from_params(params={}, recipient) 
#---------------------------------^^^ 

Вы объявляя значение по умолчанию для параметра create_from_paramsparams но не обеспечивают по умолчанию для recipient. Параметры со значениями по умолчанию должны отображаться в конце списка аргументов, и за ними не могут следовать параметры без значений по умолчанию.

Это сообщение об ошибке:

contact_user.rb:13: syntax error, unexpected ')', expecting '=' 

говорит нам, что Руби ожидал увидеть знак равенства для значения по умолчанию recipient, когда он попал в закрывающую скобку для списка аргументов.

+0

Хммм ... даже этот метод относится к классу рубинов, жалуется? Я просто вызываю ContactUser.new – keruilin

+2

@keruilin: Синтаксическая ошибка является синтаксической ошибкой. Файл должен быть проанализирован, прежде чем вы сможете что-либо с ним сделать, вы не можете называть 'ContactUser.new' до тех пор, пока класс' ContactUser' не будет проанализирован. –

+0

hah, я слышу, что я ... нет смысла спорить с переводчиком :) – keruilin

Смежные вопросы