2015-07-19 43 views
1

我應該手動添加一個user_id到隱藏的窗體中嗎?或者,還有更好的方法?Ruby on Rails:手動保存用戶標識?還是有更好的方法?

我有型號:

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

或者有另一種方式做到這一點?我想如果模型是相互關聯的,它會自動將user_id添加到項目的數據庫中?

謝謝!


編輯:轉換了所有的旅行項目,這樣別人需要幫助的知道

+0

您可以將其保存在控制器動作了。 – Pavan

+0

你爲什麼不使用關聯。旅程可以屬於用戶,然後你可以做'current_user.trip.build(trip_params)' – Deep

+0

@深,我的版本更好 – asiniy

回答

4

沒有。這不應該是形式上的,因爲每個人都可以在形式上改變隱藏的價值。

假設你使用強大的參數

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 
3

如果你把隱藏的表單上的用戶ID,將導致安全違反。由於使用瀏覽器工具,黑客可以更改user_id併爲其他用戶注入信息。更好的方法是將其放入控制器中。

+1

爲什麼當它說明正確的事情時會降低它? upvoted –

1

內部控制器,你可以這樣做:

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

這種方式,您保護自己免受別人手動更改HTML中的user_id

1

使用聯想到你的優點:

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