2012-05-10 85 views
0

在我tickets.js.coffee阿賈克斯後HashWithIndifferentAccess錯誤

$.ajax '/comments/add', 
    type: 'POST', 
    dataType: 'html' 
    success: (data) -> 
    alert 'success' 

<%= form_for @comment, :url => user_ticket_message_comments_path(@user, @ticket, m), :html => { :class => "add-comment", :id => "add-comment-" + @ticket.id.to_s } do |f| %> 
    <%= f.label :body, "Add comment" %> 
    <%= f.text_area :body %> 
    <%= f.hidden_field :message_id, :value => m.id %> 
    <%= f.submit "Add comment" %> 
<% end %> 

評論表:

id | message_id | body 
---------------------- 

CommentsController:

def create 
    @comment = params[:comment] 
    @comment.save 
end 

我的routes.rb:

resources :messages do 
    resources :comments 
end 

我得到這個錯誤:

undefined method `save' for {"body"=>"awef", "message_id"=>"15"}:ActiveSupport::HashWithIndifferentAccess 

評論屬於消息和消息有很多評論。

我應該在哪裏修復這個錯誤?

回答

2

params[:comment]是一個Hash,而不是一個Comment對象,因此不能被「保存」。您需要創建一個新的Comment對象,並指定每個屬性給它,然後保存Comment對象:

def create 
    @comment = Comment.new(params[:comment]) 
    @comment.save 
end 

根據您的應用程序是怎樣的「新」,config.active_record.whitelist_attributes可以設置爲true,在這種情況下,上述會給你一個安全錯誤,你應該閱讀Rails Guides on Mass-Assignment以獲得更多關於如何正確分配屬性的信息(實際上你應該閱讀它)。

+0

感謝您的參考。我不能相信我忽略了這一點。 –