我是Rails的新手(對於編程來說相當新穎),我正在爲自己構建一個Web應用程序作爲學習的方式。現在我正在修改腳手架表格等。Rails語法將POST參數從表單傳遞給控制器
我的問題是在我的控制器中的「創建」方法。有兩個我關心的實體:用戶表和Habit表。我在_form創建一個下拉框部分的習慣看法,讓一個人從所有可用的列表創建一個習慣如下
<%= collection_select :user, :id, @users, :id, :first_name %>
習慣控制器時,選擇用戶,當然有
def new
@users = User.all
...
end
這工作得很好,當表單提交時發佈兩個哈希參數:習慣和:用戶。現在,當我想要在create方法中處理表單輸入時,我不確定如何正確使用該語法並將user_id分配給新創建的習慣。我想要做的是這樣的事情
def create
@habit = Habit.new(params[:habit], params[:user])
end
這當然是不正確的語法。
def create
@habit = Habit.new(params[:habit])
end
正確地分配來自:habit hash的params,但是然後user_id保持未設置狀態。
有效的是以下內容,但代碼非常冗長,需要手動分配每個值。
def create
@habit = Habit.new(:user_id => params[:user][:id],
:description => params[:habit][:description],
:habit_method => params[:habit][:habit_method],
:time_reqd => params[:habit][:time_reqd],
:will_reqd => params[:habit][:will_reqd],
:active => params[:habit][:active])
end
所以我的問題是,有一種形式,在多個散列數據發佈,什麼是這些參數傳遞到控制器中的一些方法的正確方法處理時?
啊,OK。所以大規模的任務是一種捷徑。這就說得通了。還有一個語法問題:如果:用戶散列有多個鍵(在前面的例子中它只有一個),這個散列是否會分配散列「@habit = params [:user]'?換句話說,你可以在現有的對象上使用質量分配嗎?非常感謝您的幫助! – bknoles 2011-12-18 23:20:50
否; '@habit = params [:user]'複製了'params [:user]'對象(這是一個散列),因此你所做的只是用這個覆蓋'@習慣'。不過,您可以執行'@habit.attributes ='。 –
2011-12-19 14:46:09