Rails 3 - 在隐藏表单字段中使用user.id与使用关联

Mse*_*enb 6 forms ruby-on-rails associations has-many ruby-on-rails-3

好的,目前我有一张表格

<div class="field">
  <%= f.label :title %><br/>
  <%= f.text_field :title %><br/>
  <%= f.label :itunesurl %><br />
  <%= f.text_field :itunesurl %><br />
  <%= f.hidden_field :user_id, :value => current_user.id %>
</div>
<div class="actions">
  <%= f.submit %>
</div>
Run Code Online (Sandbox Code Playgroud)

它将current_user.id传递给我的"app"模型的create方法,该方法在保存之前将其创建为:

@app = App.new(params[:app])
Run Code Online (Sandbox Code Playgroud)

但是我有(伪代码)的关联

user has_many apps
apps belongs_to user
Run Code Online (Sandbox Code Playgroud)

问题:在create方法中执行类似的操作是否更安全(因此表单不会被修改)?

@user = current_user
@app = @user.apps.create(params[:app])
Run Code Online (Sandbox Code Playgroud)

如果是这样......我究竟将如何实际实现上面的代码(它在语法上不正确..只是伪)?

谢谢!

Sco*_*ott 9

是的,使用您建议的第二种方式是最好的方法

@user = current_user
@app = @user.apps.create(params[:app])
Run Code Online (Sandbox Code Playgroud)

还要确保你保护自己免受大规模任务的影响,请阅读这篇http://stephensclafani.com/2010/01/04/ruby-on-rails-secure-mass-assignment/


rye*_*guy 5

采用第二种方法绝对更安全。如果您采用第一种方式,您就相信客户会说出自己的身份。任何人都可以轻松修改表单(使用 firebug,或者他们可以POST使用许多工具手动提交请求)并最终使用current_user另一个人提交表单。

确保在整个应用程序中的任何地方都应用这种思想。永远不要相信客户提交的任何内容。