2012-03-12 88 views
1

似乎應該有一種超級快速的Railsy方式來做到這一點,但過多的Google使用什麼方法都無濟於事。在Rails 2.3.x中以一種形式更新多個表格

好的。我需要從一個表格更新三個表格。等式的視圖部分有詳細記錄(form_for,fields_for)。但我不確定如何處理髮送到父控制器中更新操作的表單參數。注意:這三個表都有一個定義好的Rails關聯。

查看:賬戶控制器

<% form_for @account do |a| %> 

    <table> 
    <tr class="odd"> 
     <td> 
     <%= a.label :plan_id %> 
     </td> 
     <td> 
     <%= a.text_field :plan_id %> 
     </td> 
    </tr> 

    <tr class="even"> 
     <td> 
     <%= a.label :company %> 
     </td> 
     <td> 
     <%= a.text_field :company %> 
     </td> 
    </tr> 

    <% fields_for @user do |u| %> 

     <tr class="odd"> 
     <td> 
      <%= u.label :first_name %> 
     </td> 
     <td> 
      <%= u.text_field :fname %> 
     </td> 
     </tr> 
     <tr class="even"> 
     <td> 
      <%= u.label :last_name %> 
     </td> 
     <td> 
      <%= u.text_field :lname %> 
     </td> 
     </tr> 
    <tr class="odd"> 
     <td> 
      <%= u.label :email %> 
     </td> 
     <td> 
      <%= u.text_field :email %> 
     </td> 
     </tr> 
     <tr class="even"> 
     <td> 
      <%= u.label :phone %> 
     </td> 
     <td> 
      <%= u.text_field :phone %> 
     </td> 
     </tr> 
     <tr class="odd"> 
     <td> 
      <%= u.label :title %> 
     </td> 
     <td> 
      <%= u.text_field :title %> 
     </td> 
     </tr> 

    <% end %> 

    <% fields_for @site do |s| %> 

     <tr class="even"> 
     <td> 
      <%= s.label :domain %> 
     </td> 
     <td> 
      <%= s.text_field :domain_name %> 
     </td> 
     </tr> 
     <tr class="odd"> 
     <td> 
      <%= s.label :url %> 
     </td> 
     <td> 
      <%= s.text_field :url %> 
     </td> 
     </tr> 

    <% end %> 

     <tr> 
     <td colspan="2"> 
      <%= a.submit :submit %> 
     </td> 
     </tr> 

    </table> 

<% end %> 

更新動作(這不工作):

account = params[:account] 
user = account 
site = account 

account.save! 
user.save! 
site.save! 

如何處理被髮布到更新行動PARAMS?從一個表單創建三個表中的新記錄似乎很簡單,但我不知道如何從同一個表單更新這三個表。

回答

0

如果帳戶/用戶/網站都是相關的,那麼您模型中的關聯將爲您處理「表格」。你應該從模型的角度考慮你的問題(即:你的域名/業務問題)。假設一個用戶可以擁有多個帳戶(否則,帳戶模型中沒有任何點),並且每個帳戶都可以擁有一個網站(虛擬主機管理應用程序?)。

如果使用has_many等關係在app/models/*。rb中設置關聯,則在控制器方法(或IRB)中保存表單非常容易。你擁有的控制器代碼根本就不對。你不能指定這樣的變量,並期望Rails做這麼多的魔術。

account.user = params[:user] 
account.site = params[:site] 

對於嵌套窗體。如果你不能得到那個工作,使用rails c

account = Account.new 
user = User.new 
site = Site.new 
account.user = user 
account.site = site 
account.save # will fail if you have constraints/validations 

讓它在軌道c和IRB工作,然後使用螢火蟲或其他瀏覽器的工具,在您的形式和HTTP活動的期待。把它放在你的控制器方法puts params中,你會看到嵌套的表單是如何發佈的。

相關問題