簡體   English   中英

在Rails 2.3.x中以一種形式更新多個表

[英]Updating multiple tables in one form in Rails 2.3.x

似乎應該有一種超級快速的Railsy方法來做到這一點,但是過多的Google搜尋並不能解決任何問題。

好。 我需要從一種形式更新三個表。 等式的視圖部分有據可查(form_for,fields_for)。 但是我不確定如何處理在父控制器中發送到update操作的表單參數。 注意:這三個表都具有已定義的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!

如何處理發布到更新操作的參數? 從一種形式在三個表中創建新記錄似乎很簡單,但是我不知道如何從同一形式更新這三個表。

如果帳戶/用戶/站點都相關,則您在模型中的關聯將為您處理“表”。 您應該從模型方面考慮問題(即:您的域/業務問題)。 假設一個用戶可以有多個帳戶(否則,帳戶模型中沒有問題),每個帳戶可以擁有一個站點(虛擬主機管理應用程序?)。

如果您使用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

使它在Rails c和IRB中工作,然后使用Firebug或其他瀏覽器工具查看表單和HTTP活動。 將其放在控制器方法中將puts params ,您將看到嵌套表單的發布方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM