2013-01-02 156 views
0

我有一個用戶模型,其中包含一個帶有布爾值的「email switch」列。我想在我的視圖中創建一個按鈕,允許用戶打開和關閉他們的電子郵件。我無法獲得提交按鈕來更新用戶模型中的值。Rails 3:使用提交按鈕來更新模型屬性

<%= form_for :user do |f| %> 
     <label>On</label> 
     <%= f.radio_button :email_switch, true %> 
     <label>Off</label> 
     <%= f.radio_button :email_switch, false %> 
     <%= f.submit "Save", :controller => "dashboard_emails", :action => "update", :method => "put" %> 
    <% end %> 


class DashboardEmailsController < ApplicationController 
    before_filter :require_user 

    def index 
    end 

    def update 

    end 

    private 

    def require_user 
    @user = @logged_in_user 
    end 


class User 
    field :email_switch, type: Boolean, default: false 
end 

回答

1

您需要的參數傳遞給form_for不給f.submit通話。如果你有一個分配給@user持久化的用戶,你應該能夠做到:

<%= form_for @user do |f| %> 
    <label>On</label> 
    <%= f.radio_button :email_switch, true %> 
    <label>Off</label> 
    <%= f.radio_button :email_switch, false %> 
    <%= f.submit "Save" %> 
<% end %> 

當然,你需要resources :usersconfig/routes.rb得到這個工作。那麼這應該發出一個PUT請求/users/47,這反過來又觸發的#update動作你UsersController

+0

這種形式被放置在用戶的儀表板,這意味着它應該更新到http裏面://本地主機:3000 /儀表板/電子郵件和而不是用戶的ID。我很困惑,我可以如何確保表單發佈到正確的位置,而不是http:// localhost:3000/users /#{user.id} – Smooth