Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails向请求传递额外的参数,而不使用隐藏的字段标记_Ruby On Rails_Form Helpers - Fatal编程技术网

Ruby on rails Rails向请求传递额外的参数,而不使用隐藏的字段标记

Ruby on rails Rails向请求传递额外的参数,而不使用隐藏的字段标记,ruby-on-rails,form-helpers,Ruby On Rails,Form Helpers,我有两个模型,分别是Post和PostComment。 目前,我使用hidden_fieldform helpers发送额外数据,如张贴时间、评论海报的用户ID和发表评论的帖子ID,如下所示: <%= f.hidden_field :posttime, value: Time.now.getutc %> <%= f.hidden_field :post_id, value: @post.id %> <%= f.hidden_field :user_id, value

我有两个模型,分别是Post和PostComment。 目前,我使用
hidden_field
form helpers发送额外数据,如张贴时间、评论海报的用户ID和发表评论的帖子ID,如下所示:

<%= f.hidden_field :posttime, value: Time.now.getutc %>
<%= f.hidden_field :post_id, value: @post.id %>
<%= f.hidden_field :user_id, value: current_user.id %>


我很晚才意识到,我可以使用浏览器的检查器更改这些值,因此这是一个安全漏洞。那么如何安全地发送这些参数呢?

通常这些值不是通过表单传递的,而是通过使用嵌套URL的URL访问的(请阅读此处的说明:)

例如,要使用
post\u id
表单url,您需要设置注释路径以包含帖子,例如您将拥有
new\u post\u comment\u path
,并且在控制器中,您可以访问
参数[:post\u id]
,而无需通过表单

您的表单将变成这样:

<% form_for [@post, Comment.new] do |f| %>
   ...

Time.now.getutc
current_user.id
已在应用程序中的
create
update
方法中可用,因此您不需要将它们传回。至于
@post.id
,您只需将其存储在
新建
编辑
方法中的会话变量中即可

session[post_id] = @post.id
然后在您的
中创建
或`更新方法

@post_comment.post_id = session[:post_id]

谢谢你帮我清理了很多东西。我不知道
post\u id
参数会自动传递,现在它更有意义了。既然我使用的是Deviate,只要在
comment
模型中有一个
属于:user
,它不应该是
@post\u comment.user\u id=current\u user.id
(这意味着你的代码行是错误的,或者至少不符合约定的)吗,您可以使用
user
user\u id
,它们都可以工作:)如果您对其中一个进行了验证,请使用带有验证的一个。。。(例如:user\u id
的存在验证\u表示您应该更喜欢
@comment.user\u id=current\user.id
)太好了!由于我们在控制器本身中输入用户ID,并且我已经确保只有用户登录后,表单才对用户可见,因此不需要验证:user\u ID的存在,对吧?通常最好将验证作为备份。你永远不知道未来会走向何方。。。保持数据完整性是很重要的(因为如果你以后在数据库中发现不可靠的数据,这将是一件非常头疼的事情),成为一个偏执狂可以挽救一天:)再次感谢你!我完全没有想到
Time.now.utc
可以在控制器内部使用。谢谢你发现了。
@post_comment.post_id = session[:post_id]