2011-05-13 24 views
6

好了,所以現在我有一個表格Rails 3中 - 在隱藏的表單字段傳遞user.id VS利用協會

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

如果是這樣......究竟如何我會去了解實際執行上面的代碼(它不是語法正確的..只是僞)?

謝謝!

回答

1

第二個代碼片段比第一個更「RESTful」。更多RESTful,我的意思是,如果一個應用程序是一個資源,通過用戶邏輯訪問,那麼通過一切手段使用它。

您設置了通過路由方式:

resources :users do 
    resources :apps 
end 

這會給你喜歡user_app_pathnew_user_app_path,給你傳遞一個用戶ID和應用程序ID或新的應用途徑。

希望這會有所幫助

+0

那的讀取軌道2語法。由於該問題解決了標籤中的導軌3問題,我會爲您解決這個問題(如果不需要,請隨時回滾) – alternative 2011-05-13 19:01:48

+0

我知道這是一個rails 2的語法,並且太怠慢/急於查找導軌它的3版本。感謝編輯,:) – 2011-05-13 19:14:16

4

這樣做是絕對安全的第二種方式。如果你以第一種方式做到這一點,那麼你就相信客戶要說明他們是誰。任何人都可以很容易地修改表單(使用螢火蟲,或者他們可以用許多工具手動提交POST請求)並最終以另一個人的current_user提交表單。

確保您在整個應用程序中隨處應用此思想。不要相信客戶提交的任何內容。