我不熟悉表單如何工作。當表單中的字段不可用時,還可以編輯模型值嗎?
示例場景
比方說,用戶可以創建調查,但他們創造了無法對其進行編輯,但只會增加問題,給他們後。這是通過在Survey上使用編輯操作完成的。
class Survey < ActiveRecord::Base
has_many :questions
accepts_nested_attributes_for :questions
end
class Question < ActiveRecord::Base
belongs_to :survey
belongs_to :user
end
# QuestionsController
def edit
@survey = Survey.find(params[:id])
@survey.questions.build
end
def update
@survey = Survey.find(params[:id])
@survey.update_attributes(params[:survey])
redirect_to ...
end
然後形式應該是:
<%= form_for @survey do |f| %>
# No surveys fields on this form!
<% f.fields_for :questions do |builder| %>
<%= render "question_fields", :f => builder %>
<% end %>
<%= f.submit "Submit" %>
<% end %>
現在,這給調查的價值觀脆弱或開到黑客攻擊,即使我想調查的領域是在創建後無法使用?
一般來說呢?當他們不在表單上時,模型值仍可以編輯嗎?這背後的邏輯是什麼,我怎麼知道他們不能?
謝謝,只是一個試圖學習的新手。
有趣,所以'attr_accessible'只是爲了方便?爲了安全起見,我最好在控制器上手動輸入我想要的內容。 – LearningRoR
'attr_accessible'是白名單方法 - 當您使用它時,* not *包含的所有屬性都將受到保護。 「attr_protected」則完全相反。 – Thilo