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

私のroutes.rb:

resources :messages do
  resources :comments
end

次のエラーが表示されます。

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

コメントはメッセージに属し、メッセージには多くのコメントがあります。

このエラーを修正するにはどこを見ればよいですか?

4

1 に答える 1

2

params[:comment]Hashであり、Commentオブジェクトではないため、「保存」できません。新しいCommentオブジェクトを作成し、各属性をそれに割り当ててから、Commentオブジェクトを保存する必要があります。

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

アプリがどの程度「新しい」かに応じて、config.active_record.whitelist_attributesが に設定されるtrue場合があります。その場合、上記はセキュリティ エラーを引き起こします。属性を適切に割り当てる方法の詳細については、Mass-Assignment に関する Rails ガイドを読む必要があります (実際には、どちらでも読めます)。

于 2012-05-10T05:12:12.663 に答える