我有一個關於爲我正在工作的應用程序的特定部分構建寧靜設計的最佳方式的問題。寧靜設計的建議?
上的應用程序的一些背景:
User has_one :settings_for_email
有一個profile_controller,其中有一個show動作..喜歡的東西:
def show
@user = current_user
end
最初,這是設置,使形式會後回到配置文件控制器..類似於:
<% form_for profile_path(@user) do |f| %>
<% f.fields_for :settings_for_email do |s| %>
<% ... form fields ... %>
<% end %>
<% end %>
而profile_controller更新動作做了這樣的事情:
def update
@user = User.find(params[:id])
@user.settings_for_email.update_attributes(params[:user][:settings_for_email])
end
....
我不喜歡這一點,因爲它有一個漏洞,允許用戶記錄正在編輯的改變...改變,要成爲@ user = current_user,對我來說沒什麼意義,因爲它是一個需要ID的更新操作。所以去/ profile/123或profile/456會產生相同的用戶記錄(因爲它將使用current_user, params [:id]將是多餘的)..這對我來說似乎很奇怪。
作爲便箋,我需要一個控制器操作來將用戶的電子郵件設置重置爲默認值。
所以,我落得這樣做作出新的路線:
resource :settings_for_email, :only => :create do
post :reset, :on => :member
end
,然後創建一個settings_for_email_controller:
#settings_for_email_controller.rb
def create
current_user.settings_for_email.update_attributes(params[:settings_for_email_controller])
redirect_to profile_url
end
def reset
current_user.reset_settings_for_email!
redirect_to profile_url
end
...
但後來我想,可以這有什麼改進?
如果我真的想使這個100%的寧靜,那會是最好做:
#update_settings_for_email_controller:
def create
current_user.settings_for_email.update_attributes(params[:settings_for_email_controller])
redirect_to profile_url
end
#reset_settings_for_email_controller:
def create
current_user.reset_settings_for_email!
redirect_to profile_url
end
我關於這個圍欄,因爲它似乎有點傻有兩個控制器這一點。但我想不出有更好的辦法去做。同樣,使用更新需要一個id,所以會被銷燬。我原本以爲使用destroy操作來執行「reset」會很好,但是再次......它會涉及浪費的id參數。所以我想我會在這裏問你們對於這種事情的想法?
從我理解你的意思,我的控制器動作應該是這樣的:user = User.find(params [:id]);如果用戶!= current_user; render:text =>「error !!!!!」;其他; user.update_attributes(PARAMS [:用戶]);結束 .... ?你是這個意思嗎?這似乎是一個愚蠢的條件檢查,因爲登錄用戶(current_user)將永遠是應該更新的記錄。 ? – patrick