[英]Rails: Access params of a form with a nested model
我有以下型號
class GymUser < ActiveRecord::Base
belongs_to :user
belongs_to :gym
end
class User < ActiveRecord::Base
has_many :gym_users
has_one :gym
attr_accessible :gym_users_attributes, :gym_users
accepts_nested_attributes_for :gym_users
end
我有一個新用戶的表單,其中包含嵌套的 model gym_user。 我想確保用戶不存在。 這就是我正在嘗試的:
def create_member
@user = User.new(params[:user])
@user.generate_password
@dupe = User.find_all_by_email(@user.email)
if(@dupe)
@gym_user = GymUser.new(params[:user][:gym_users_attributes])
@gym_user.user_id = @dupe.id
elsif @user.save
@gym_user = @user.gym_users.order('created_at DESC').first
@gym = Gym.find(@gym_user.gym_id)
end
end
我知道這里只有一個嵌套的 model,但我不知道如何訪問這些嵌套參數。
這是表格本身
<%= form_for @user, :as => :user, :remote => true, :url => { :controller => 'users', :action => 'create_member'} do |f| %>
<table border="0" cellpadding="10" cellspacing="0">
<tr>
<td colspan="2">
<%= f.label :name %><br />
<%= f.text_field :name %>
</td>
<td colspan="2">
<%= f.label :email %><br />
<%= f.text_field :email %>
</td>
</tr>
<% f.fields_for :gym_users do |builder| %>
<tr>
<td>
<%= builder.label :role_id, "Role" %><br />
<%= builder.collection_select(:role_id, @roles, :id, :name, {:include_blank => true}, {:onchange => "new_member_role_changed()"}) %>
<%= builder.hidden_field :gym_id, :value => @gym.id %>
</td>
<td>
<%= builder.label :item_id, "Membership Level" %><br />
<%= builder.collection_select(:item_id, @gym.membership_items, :id, :name, {:include_blank => true}) %>
</td>
<td>
<%= builder.label :has_monthly_billing, "Recurring Billing?" %><br />
<%= builder.radio_button :has_monthly_billing, "1" %>Yes
<%= builder.radio_button :has_monthly_billing, "0" %>No
</td>
<td>
<%= builder.label :billing_date %><br />
<%= builder.collection_select(:billing_date, (1..31).to_a, :to_s, :to_s, {:include_blank => true}) %>
</td>
</tr>
<tr>
<td colspan="4">
<%= f.submit %>
<a href="javascript:close_new_member()">Cancel</a>
</td>
</tr>
<% end %>
</table>
<% end %>
我找到了答案。 我不確定這是否是最好的方法,但它有效
params[:user][:gym_users_attributes].values.first
你的協會應該是
has_one:gym, :through => gym_users
另外,您可以發布您的表單參數嗎?
您的重點是不允許創建重復用戶,並且您正在使用 email 來驗證這一點。 你應該使用助手
validates_uniqueness_of:email
在您的用戶 model 中。 由於您有一個嵌套屬性,因此只有在 Rails 驗證具有相同 email 的用戶不存在之后,才會創建您的 object。
我希望我能正確理解你的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.