Ajax发布HashWithIndifferentAccess错误

时间:2012-05-10 04:54:23

标签: ruby-on-rails ruby-on-rails-3

在我的tickets.js.coffee

$.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

评论属于消息,消息有很多评论。

我应该在哪里修复此错误?

1 个答案:

答案 0 :(得分: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有关如何正确分配属性的更多信息(您应该以任何方式实际读取它)。