Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 RubyonRails:手动保存用户id?还是有更好的方法?_Ruby On Rails_Ruby_Ruby On Rails 4_Devise - Fatal编程技术网

Ruby on rails RubyonRails:手动保存用户id?还是有更好的方法?

Ruby on rails RubyonRails:手动保存用户id?还是有更好的方法?,ruby-on-rails,ruby,ruby-on-rails-4,devise,Ruby On Rails,Ruby,Ruby On Rails 4,Devise,我应该手动将用户id添加到隐藏表单中吗?还是有更好的办法 我有模型: class Project < ActiveRecord::Base belongs_to :user end class User < ActiveRecord::Base has_many :projects end 我认为: <%= simple_form_for @project do |f| %> <%= f.hidden_field :value => curre

我应该手动将用户id添加到隐藏表单中吗?还是有更好的办法

我有模型:

class Project < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :projects
end
我认为:

<%= simple_form_for @project do |f| %>
  <%= f.hidden_field :value => current_user.id %>
<% end %>
还是有其他方法可以做到这一点?我想如果模型彼此关联,它会自动将用户id添加到项目的数据库中

谢谢


编辑:将所有行程转换为项目,以便其他需要帮助的人知道,如果将用户id放在隐藏表单上,将导致安全漏洞。因为使用浏览器工具,黑客可以更改用户id并为其他用户注入信息。更好的方法是将其放入控制器。

如果将用户id放入隐藏表单,将导致安全漏洞。因为使用浏览器工具,黑客可以更改用户id并为其他用户注入信息。更好的方法是将其放入控制器。

在控制器内部,您可以这样做:

def create
  @project.user = current_user
  @project.save
  #...
end

通过这种方式,您可以防止有人手动更改html中的用户id。

在控制器内部,您可以执行以下操作:

def create
  @project.user = current_user
  @project.save
  #...
end

通过这种方式,您可以防止有人手动更改html中的用户id。

否。这不应该在表单中,因为每个人都可以在表单中更改隐藏的值

假设您使用的是强参数

def create
  @project = Project.new(project_params)
  @project.save # or something else
end

def project_params
  params.require(:project).permit(something_permitted_here)
    .merge(user_id: current_user.id)
end

没有。这不应该在表单中,因为每个人都可以在表单中更改隐藏的值

假设您使用的是强参数

def create
  @project = Project.new(project_params)
  @project.save # or something else
end

def project_params
  params.require(:project).permit(something_permitted_here)
    .merge(user_id: current_user.id)
end

充分利用这种联系:

def create
  @project = current_user.projects.build(project_params)
  if @project.save
  # ...etc
end

充分利用这种联系:

def create
  @project = current_user.projects.build(project_params)
  if @project.save
  # ...etc
end

您也可以将其保存在控制器操作中。为什么不使用关联呢。Trip可以属于用户,然后您可以执行当前的\u user.Trip.buildtrip_params@Deep,我的版本是better@asiniy所以,如果没有关联,当他需要用户的行程时,您想做什么?Trip.whereuser\u id:current\u user.id或current\u user.tripst这是另一种情况。在这种情况下,trip_参数仍然可以有用户id。您也可以将其保存在控制器操作中。为什么不使用关联呢。Trip可以属于用户,然后您可以执行当前的\u user.Trip.buildtrip_params@Deep,我的版本是better@asiniy所以,如果没有关联,当他需要用户的行程时,您想做什么?Trip.whereuser\u id:current\u user.id或current\u user.tripst这是另一种情况。在这种情况下,trip_params仍然可以拥有用户id。为什么一个人在声明正确的事情时会投反对票?为什么一个人在陈述正确的事情时会投反对票?向上投票