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



好的,所以目前我有一个表单

<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>

它将current_user.id传递到我的"应用程序"模型的创建方法中,该方法在保存之前创建它:

@app = App.new(params[:app])

然而,我有(伪代码(的关联

user has_many apps
apps belongs_to user

问题:在create方法中这样做更安全吗(这样表单就不会被修改(?

@user = current_user
@app = @user.apps.create(params[:app])

如果是这样的话……我该如何实际实现上面的代码(语法不正确……只是伪代码(?

谢谢!

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

@user = current_user
@app = @user.apps.create(params[:app])

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

第二种方法绝对更安全。如果你用第一种方式,你就相信客户会说出他们是谁。任何人都可以很容易地修改表单(使用firebug,或者使用许多工具手动提交POST请求(,最终使用另一个人的current_user提交表单。

确保在整个应用程序中处处应用这种思想。永远不要相信客户提交的任何东西。

第二个代码片段比第一个更"RESTful"。我的意思是,如果一个应用程序是一个通过用户逻辑访问的资源,那么无论如何都要使用它

你通过路线设置的方式:

resources :users do
  resources :apps
end

这将为您提供路径,如user_app_pathnew_user_app_path,您可以将用户ID和应用程序ID或新应用程序传递到这些路径。

希望这能帮助

相关内容

  • 没有找到相关文章

最新更新