[英]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.