通常、これらの値は、フォームから渡されていませんが、ネストされたURLを使ってURLを介してアクセスされている(どのようにここで読む:http://guides.rubyonrails.org/routing.html)を
例えばpost_id
フォームにURLを使用する、あなたのコメントを設定したいですあなたがnew_post_comment_path
を持っていて、あなたのコントローラにparams[:post_id]
にアクセスすることができます。
あなたのフォームはこのようなものになるだろう:
再
<% form_for [@post, Comment.new] do |f| %>
...
:
user_id
は - 間違い形で、あなたは、これは大きなセキュリティ上の懸念事項であることは非常に正しいことを通過しない(人がコメントを追加することができます他の人のために!)コントローラの認証方法(例:
current_user
)でアクセスしてください。あなたのコントローラなどで、このようなものに終わるだろう
:あなたは本当に渡す必要はありませんので、
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.new(comment_params)
@comment.user = current_user
if @comment.save
redirect_to [@post, @comment]
else
render_action :new
end
end
private
# Don't forget to use require/permit to make sure the user can't
# fake up the user/post id fields themselves out of whole-cloth
def comment_params
# or whatever your permitted comment-fields are.
params.require(:comment).permit(:content)
end
おかげでそれを保存することができ私のためのもの。私は 'post_id'パラメータが自動的に渡されたことを知らなかったので、もっと意味があります。私はdeviseを使用しているので、 '@post_comment.user_id = current_user.id'(コード行が間違っていることや、少なくとも規約に従わないことを暗示する)であるべきではありません –
' belongs_to:user '' Comment'モデルでは、 'user'または' user_id'を使うことができます。どちらもちゃんと働くでしょう:) どちらか一方のバリデーションがある場合は、例えば 'validates_presence_of:user_id'はあなたが' @comment.user_id = current_user.id'を好むべきであることを意味します) –
素晴らしい!コントローラー自体のユーザーIDを登録しているので、ユーザーがサインインしている場合にのみフォームがユーザーに表示されるようにしていますので、 'validates_presence_of:user_id'権限は必要ありません。 –