0

在我的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
----------------------

评论控制器:

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

我的路线.rb:

resources :messages do
  resources :comments
end

我收到此错误:

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

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

我应该在哪里解决这个错误?

4

1 回答 1

2

params[:comment]是 a 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以获取有关如何正确分配属性的更多信息(实际上您应该无论哪种方式阅读)。

于 2012-05-10T05:12:12.663 回答