2014-02-11 4 views
0

Я получаю сообщение об ошибке при отправке запроса на отправку в контроллер комментариев с помощью form_for ([@ post, @comment]). Чтобы создать комментарий.Сильные параметры и вложенные параметры - Rails 4

ActiveModel :: ForbiddenAttributesError в CommentsController # создать

линии вызывает ошибку:

@comment = @post.comments.build(params[:comment]) 

Я знаю, что это до сильного вопроса параметров, но я не могу показаться, чтобы получить это право. На данный момент моя модель для должностей:

posts.rb

class Post < ActiveRecord::Base 
    has_many :comments, dependent: :destroy 
end 

И для комментариев:

comment.rb

class Comment < ActiveRecord::Base 
    belongs_to :post 
end 

Моя текущая настройка сильные параметры для контроллера комментариев это:

комментарии_controller.rb

private 

    def comment_params 
     params.require(:post).permit(comment: [:name, :body]) 
    end 

И, наконец, параметры, как сообщается в сообщении об ошибке являются:

{"utf8"=>"✓", 
"authenticity_token"=>"MSX1PrrvfzYBr/DNYaMgSw3opWmaJs82xd11JfLPIqI=", 
"comment"=>{"name"=>"", 
"body"=>""}, 
"commit"=>"Create Comment", 
"post_id"=>"1"} 

Кто есть какие-либо идеи, где моя сильная установка PARAMS разбиваются - любые идеи, были бы весьма признательны. Благодаря!

ответ

2

В вашем контроллере вам требуется ваше сообщение, а не ваш комментарий. Может быть, попробовать:

def comment_params 
    params.require(:comment).permit(:name, :body) 
end 

затем сделать:

@comment = @post.comments.build(comment_params) 

Смотрите, если это помогает.

+0

спасибо за ваш ответ это оценили. Есть ли какие-либо руководства или документы, которые вы бы рекомендовали читать по вложенным параметрам? – Tom

+0

Конечно, посмотрите страницу github здесь: https://github.com/rails/strong_parameters. – jklina

1

Несколько проблем ...

Одна проблема заключается в том, что вы не используете comment_params в методе build ...

@comment = @post.comments.build(params[:comment]) 

должен быть

@comment = @post.comments.build(comment_params[:comment]) 

Но у нас есть еще одна проблема в том, что ваш отправленный params на самом деле не {post: {comment: 'stuff here'}}, как ваш comment_params метод указывает. Это на самом деле {comment: 'stuff here'}

Таким образом, вы должны изменить комментарий Титулы:

def comment_params 
    params.require(:comment).permit(:name, :body) 
end 

, а затем построить свой комментарий:

@comment = @post.comments.build(comment_params) 
Смежные вопросы