2014-08-28 26 views
0

我有兩個型號回報率 - 新的更新動作

 
Client.rb 
    has_many :addresses 
    accepts_nested_atributes_for :addresses 


Address.rb 
    has_many :addresses 

我以新的機構加入到一個客戶端創建一個新的動作update_establishmentsClientsController

 
ClientsController.rb 

    #the corresponding view of this action will render the locations_form 
    def add_establishments 
    @client = Client.find(params[:id]) 
    @client.addresses.build 
    end 

    def update_establishments 
    create_zip 
    respond_to do |format| 
     if @client.update(client_params) 
     set_zip 
     format.html { redirect_to @client, notice:'Establishment added.'} 
     format.json {head :no_content} 
     else 
     format.html { render action: 'edit'} 
     format.json { render json: @client.error, status: :unprocessable_entity } 
     end 
    end 
    end 


locations_form 

    %= form_for @client, :url=>{:action=>'update_establishments'}, html:{ :method =>"patch"} do |form| %> 

我有兩個問題:

1 - 當形式呈現,形式呈現兩個單獨的字段中的地址,一個包含現有地址的值,和另一個以添加新。我怎樣才能不提出現有的地址?

2 - 它在update_establishments操作上給出了一個明顯的錯誤,因爲@client爲零。有沒有一種方法可以將客戶自己從表單發送到操作,還是必須添加具有值的隱藏字段?

回答

1

問題1,當您致電@client.addresses.build時,它正在爲客戶建立第三個地址。我的猜測是你在窗體上顯示全部三個地址。

問題2,您需要發送帶請求的客戶端ID,並使用它來查找客戶端。

下面應該解決這兩個問題。

儘可能 - 而且幾乎總是可以的 - 儘量堅持standard Rails controller actions。像add_establismentsupdate_establishments這樣的非標準控制器動作通常表明存在更多「Rails」方法來建模您的控制器。

在這種情況下,我會質疑爲什麼ClientsContoller處理機構。如果您添加EstablishmentsController,我的猜測是事情纔會開始起作用。這裏是如何做到這一點:

在config/routes.rb中,創建一個具有嵌套企業資源的客戶端資源。

resources :clients do 
    resources :establishments 
end 

這會給你一些nested routes將全部開始/客戶/:CLIENT_ID /場所。

創建一個EstablishmentsController並將add_establishmentsupdate_establishments移動到它。將add_establishments重命名爲new,並將update_establishments重命名爲update。還要將相應的視圖移到/ views/establishments /並重命名它們以匹配它們的新操作名稱。

如果沒有令人信服的理由在new操作中找到客戶端,則可以創建一個新的機構以傳遞給視圖。無論哪種方式,你的表格都將與這個新的機構相關聯,而不是與現有的客戶相關聯。 (問題1)

update中,您將使用:client_id param來查找客戶端。 (問題2)update需要一些按摩功能,但我需要知道您是否真的一次更新多個機構,或者只需要一個機構來說明它會是什麼樣子。 (你不會更新@client本身,但客戶的場所。)

+0

我最重視你的答案,這讓我想到另一種方式來建立模型。然而,我有一個新的懷疑,我希望你看看,如果你可以http://stackoverflow.com/questions/25595309/ror-create-record-on-many-to-many-join-table。感謝您的時間 – NunoRibeiro 2014-08-31 19:07:53