我收到一個錯誤,但我不明白爲什麼。我有一個表單傳遞給控件輸入以創建一個模型實例。創建模型實例的問題 - Ruby on Rails中的TypeMismatch錯誤
下面的形式:
=form_for :message, :url => {:action => 'create', :controller => 'messages'} do |f|
=f.text_area :body, :placeholder => 'Enter your message.', :size => '40x5'
=f.hidden_field :subject, value: "RE:#{@message.subject}"
=f.hidden_field :parent, value: @message.id
=f.hidden_field :receiver, value: @message.sender
=f.submit 'Reply'
這裏是控制器:
def create
user = User.find_by_username(params[:message][:receiver])#remove receiver and give it a varibale -rg 4/29
if user ||= User.find_by_id(params[:message][:receiver]).username#valid entry -rg 4/29
params[:message].delete('receiver')
params[:message][:status] = 'unread'#set status -rg 4/29
params[:message][:sender] = @current_user#set sender -rg 4/29
# raise params.inspect
13 => @message = Message.create!(params[:message])#create message! -rg 4/29
if parent = params[:message][:parent]#checks if this is a reply to another message -rg 4/29
Message.find_by_id(parent).update_attributes(:child => @message)#updates parent message to have this message as child -rg 4/29
end
@message.received<<user#adds receiver to database
flash[:notice] = "Message was successfully sent."
redirect_to messages_path
else
flash[:warning] = "There is no user with that username."
redirect_to messages_path
end
end
我的消息模型:
class Message < ActiveRecord::Base
attr_accessible :body, :subject, :status, :sender, :receiver,:parent, :child
belongs_to :sent, :class_name => 'User'
has_and_belongs_to_many :received, :class_name => 'User'
belongs_to :parent, :class_name => 'Message'
has_one :child, :class_name => 'Message'
end
我得到的錯誤,包括跟蹤:
ActiveRecord::AssociationTypeMismatch in MessagesController#create
Message(#41016000) expected, got String(#17696120)
Rails.root: /home/renee/classes/SE/Brainstormy
Application Trace | Framework Trace | Full Trace
app/controllers/messages_controller.rb:13:in `create'
這裏是正在傳遞的PARAMS:
{"utf8"=>"✓",
"authenticity_token"=>"yLYTXNTjluDk15dm554vpjom7hlQCC2d+hGmkuLJcEE=",
"message"=>{"body"=>"j",
"subject"=>"RE:j",
"parent"=>"1",
"status"=>"unread",
"sender"=>2},
"commit"=>"Reply"}
這很有趣,因爲我有一個使用完美的作品相同的控制器第二種形式。看來,我的額外領域:parent
是罪魁禍首。但我想不想傳遞消息。我想要的是通過一個整數即id。但它以字符串形式傳遞。誰能幫我解決這個問題嗎?
向我們展示該請求的參數,尤其是params [:message] – 2013-05-02 18:44:55
爲什麼不只是params [:message] [:parent] = params [:message] [:parent] .to_i在創建對象之前? – Mattherick 2013-05-02 18:51:58
我想過這個。但是,由於某種原因,這是行不通的,因爲期望一個對象,而不是一個字符串或一個int – BooBailey 2013-05-02 18:54:12