在我的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
评论属于消息,消息有很多评论。
我应该在哪里修复此错误?
答案 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有关如何正确分配属性的更多信息(您应该以任何方式实际读取它)。