2013-07-11 24 views
1

我有一個用戶,他希望能夠休假放假。我的看法是這樣的:使用「新」表單進行數據庫更改

<h2>Request Days Off</h2> 

<%= form_for(@user, :as => :user, :url => vacation_days_path) do |f| %> 

    <div><%= f.label "How many vacation days would you like to take?" %> 
    <%= f.number_field :vacation_days %></div> 

    <div><%= f.submit "Submit" %></div> 

<% end %> 

在我的控制器中,我有新的和創建方法。在「創建」的方法我在互聯網上看到的所有例子,有一個類似的代碼

@person = User.new(user_params) or whatever 

線我的問題是,我沒有vacation_days模型。只有一個控制器。我想編輯用戶數據庫,但創建新用戶不能成爲答案(對嗎?)。

如何創建一個可用的創建方法?

回答

2

這不是真正的REST風格......但是,如果要更新現有的用戶,你可以這樣做這樣

@user = User.find(params[:id]) 
@user.update_attributes(params[:user]) 

其中params[:id]將舉行要更新的用戶的ID和params[:user]將擁有你想要更新的屬性。

由於您使用form_for(@user)及其表單構建器,它應該沒問題。

+0

這是有道理的。我在想,究竟是什麼不是RESTful呢?我將如何去糾正它? – Mike

+0

非常簡單,如果您想更新用戶,您需要在用戶控制器(更新方法)中執行此操作。你不應該在你的表單中指定'url',默認情況下應該沒問題。有時,這是不可能的,我不知道你的應用程序,它的目標和侷限性:) –

+0

好吧,在你和另一個人之間,似乎我不需要一個控制器的假期。猜猜我會殺了一堆代碼。啊,初級開發者的生活。謝謝! – Mike

1

在我看來,假期裏你需要單獨的控制器。只需擁有一個vacation_days/edit視圖,其中包含您的表單,並將其提交給用戶/更新。

爲了清楚起見,您的操作應該是編輯和更新用戶,而不是「創建」一個。所以,你的控制器更新你的用戶的行爲應該有以下行:

@user.update_attributes(params[:user]) 
+0

提交給用戶/更新聽起來像是正確的事情。我是否在表單中調用該行代碼或什麼? – Mike