如何正确地将参数传递给rails表单
Posted
技术标签:
【中文标题】如何正确地将参数传递给rails表单【英文标题】:How to pass params to rails form correctly 【发布时间】:2021-07-12 01:33:32 【问题描述】:我是学习 Rails 的新手。我想尝试创建一个简单的应用程序,用户可以在其中写帖子,然后其他人可以对他们的帖子发表评论。
我有 3 个模型。用户、帖子和评论。创建新评论时,我无法将参数中的 post_id 和 user_id 带入。
这是我在 cmets 控制器中的新方法
def new
@comment = Comment.new(user_id: params[:user_id], post_id: params[:post_id])
end
在我的服务器中,我似乎正在传递 params 键(不确定这是否是正确的术语)并且我正在寻找值。
Started GET "/comments/new?post_id=post_id&user_id=user_id" for ::1 at 2021-04-16 22:40:14 -0700
(0.1ms) SELECT sqlite_version(*)
Processing by CommentsController#new as html
Parameters: "post_id"=>"post_id", "user_id"=>"user_id"
Rendering comments/new.html.erb within layouts/application
Rendered comments/_form.html.erb (Duration: 1.5ms | Allocations: 715)
Rendered comments/new.html.erb within layouts/application (Duration: 1.8ms | Allocations: 814)
[Webpacker] Everything's up-to-date. Nothing to do
Completed 200 OK in 18ms (Views: 9.9ms | ActiveRecord: 0.6ms | Allocations: 10798)
我传递的参数是“post_id”,它应该是一个与正确帖子对应的整数。
我不确定要谷歌什么来弄清楚如何获取参数。我想也许它嵌套在 cmets 控制器下所以我试过了
def new
@comment = Comment.new(user_id: params[:comments][:user_id], post_id: params[:comments][:post_id])
end
这破坏了我的代码。我不知所措。我不知道用什么谷歌来尝试解决这个问题。任何帮助将非常感激。谢谢。
【问题讨论】:
【参考方案1】:我的建议是不要在“GET”方法中传递大量参数。使用 post 方法,对于@thibault 提到的强参数,您需要按以下格式传递参数
"comments" => "post_id"=>"post_id", "user_id"=>"user_id"
在新动作中,你只需要渲染表单,在表单中输入值后,使用'POST'方法创建评论。 Rails 中有很多表单助手,你可以在这里查看它们https://guides.rubyonrails.org/form_helpers.html 我建议你使用 rails form helper 'form_with' - https://apidock.com/rails/ActionView/Helpers/FormHelper/form_with
如果您不熟悉 Rails,请使用“脚手架”并通过观察每个操作的代码和日志来了解事物。
rails generate scaffold Comment
【讨论】:
【参考方案2】:你需要通过强参数: https://api.rubyonrails.org/v6.1.3/classes/ActionController/StrongParameters.html
def create
@comment = Comment.new(comment_params)
end
private
def comment_params
params.require(:comment).permit(:user_id, :post_id)
end
除此之外,我认为您应该为您的 http 请求使用 post 方法。
【讨论】:
以上是关于如何正确地将参数传递给rails表单的主要内容,如果未能解决你的问题,请参考以下文章
如何最好地将 CString 转换为 BSTR 以将其作为“in”参数传递给 COM 方法?
如何正确地将参数传递给基于类的视图测试 Django Rest Framework?