Ruby on rails RubyonRails:手动保存用户id?还是有更好的方法?
我应该手动将用户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
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。为什么一个人在声明正确的事情时会投反对票?为什么一个人在陈述正确的事情时会投反对票?向上投票