我到处寻找解决方案,但没有提出任何解决方案。
有效的部分:我的应用允许客户使用嵌套表单创建帐户。收集的数据在四个模型中创建记录 - 帐户,用户,accounts_users(因为用户可以与许多帐户关联)和配置文件(用于存储用户的fname,lname,phone等)。
无效的部分:登录后,我希望用户能够使用下面的表单向其帐户添加更多用户。我在提交时没有收到任何错误,但我被带回到同一表格,没有创建额外的记录。任何帮助都会很棒!
这是嵌套表格......
<%= form_for @user, :validate => true do |f| %>
<fieldset>
<%= f.fields_for :profile do |p| %>
<div class="field">
<%= p.label :first_name %>
<%= p.text_field :first_name %>
</div>
<div class="field">
<%= p.label :last_name %>
<%= p.text_field :last_name %>
</div>
<div class="field">
<%= p.label :phone %>
<%= p.text_field :phone %>
</div>
<% end %>
<div class="field">
<%= f.label :email %>
<%= f.text_field :email %>
</div>
<div class="actions">
<%= f.submit 'Create New User', :class => "btn btn-large btn-success" %>
<%= cancel %>
</div>
</fieldset>
ApplicationController将所有内容范围都限定为current_account,如下所示:
def current_account
@current_account ||= Account.find_by_subdomain(request.subdomain) if request.subdomain
end
UsersController
def new
@user = User.new
@user.build_profile()
#current_account.accounts_users.build() #Edit2: This line was removed
respond_to do |format|
format.html # new.html.erb
format.json { render json: @user }
end
def create
@user = User.new(params[:user])
@user.accounts_users.build(:account_id => current_account.id) #Edit2: This line was added
if @user.save
# Send Email and show 'success' message
flash[:success] = 'An email has been sent to the user'
else
# Render form again
render 'new'
end
end
模型看起来像这样:
class Account < ActiveRecord::Base
attr_accessible :name, :subdomain, :users_attributes
has_many :accounts_users
has_many :users, :through => :accounts_users
accepts_nested_attributes_for :users
end
class User < ActiveRecord::Base
attr_accessible :email, :password, :password_confirmation, :profile_attributes
has_many :accounts_users
has_many :accounts, :through => :accounts_users
has_one :profile
accepts_nested_attributes_for :profile
end
class AccountsUser < ActiveRecord::Base
belongs_to :account
belongs_to :user
end
class Profile < ActiveRecord::Base
belongs_to :user
attr_accessible :first_name, :last_name, :phone
end
Edit2:事实证明我在User模型中需要密码+ password_comfirmation验证,这使我无法添加没有这些字段的其他用户。我注释掉了这些验证并删除了“new”操作中的行:current_account.accounts_users.build(),并在“create”操作中添加了以下行:@ user.accounts_users.build(:account_id =&gt; current_account.id)
答案 0 :(得分:0)
&#34;我希望用户能够使用下面的表单向他们的帐户添加更多用户。&#34;我假设您的意思是个人资料(因为您的嵌套表单位于个人资料中)?
如果是这种情况,我认为您的UsersController的创建操作并不是通过使用new来将配置文件与用户相关联。
试试这个......
def new
@user = User.build
@profile = @user.profiles.build #build adds the profile to user's associated collection of profiles, but new doesn't
...
end
def create
@user = User.build(params[:user])
if @user.save
....
end
end
如果您希望用户与帐户关联,那么您需要在AccountsController中放置new和create操作,并执行与用户和配置文件记录的嵌套关联类似的操作。
回到新的原因是因为你在创作结束时渲染了新的,以防这也是问题的一部分。希望有所帮助!