我是Ruby on Rails的新手。 我试图用设计注册一个新用户,同时创建一个新的Company对象。他们之间的关联:用户属于公司。公司拥有众多用户。我尝试根据此链接制作它:http://railscasts.com/episodes/196-nested-model-form-part-1?view=asciicast,但它没有用。它说:“公司的未定义方法”,即公司没有电子邮件属性。 在注册表单中,我只为用户添加了电子邮件属性
<div class="title"><%= t('.signup') %></div>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="control-group"><%= f.label :email, t('.email') %>
<%= f.email_field :email %></div>
<div class="control-group"><%= f.label :password, t('.password') %>
<%= f.password_field :password %></div>
<div class="control-group"><%= f.label :password_confirmation, t('.password_confirmation') %>
<%= f.password_field :password_confirmation %></div>
<%= f.fields_for :company_attributes do |f_company| %>
<div class="control-group"><%= f_company.label :name, t('.company_name') %>
<%= f_company.text_field :name %></div>
<% end %>
<div class="buttons"><%= f.submit t('.signup'), class:"btn btn-primary" %><br>
<%= render "links" %></div>
<% end %>
更新
公司控制人:
class CompaniesController < Devise::RegistrationsController
def new
@company = Company.new
@user = @company.users.build
end
def create
@company = Company.new(params[:company])
@user = User.create(params[:user].merge(company_id:company.id))
if @company.save
redirect_to "/"
else
render 'users/sign_up'
end
end
end
用户控制器:
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
redirect_to users_path
else
render 'users/new'
end
end
我真的很感激任何想法和任何帮助。提前致谢
答案 0 :(得分:4)
在您的情况下,由于您只对收到 company_name 感兴趣,因此我会通过text_field_tag
简化并提交 company_name 。< / p>
换句话说,我会替换:
<%= f.fields_for :company_attributes do |f_company| %>
<div class="control-group"><%= f_company.label :name, t('.company_name') %>
<%= f_company.text_field :name %></div>
<% end %>
有了这个
<%= text_field_tag 'company_name', {placeholder:"Enter here the name of your company",class:"form-control"} %>
这会将名称提交给UsersController
,您可以使用params[:company_name]
访问它,以便控制器看起来像这样:
用户控制器:
def new
@user = User.new
end
def create
@user = User.create(params[:user])
#Create a company via 'user<->company' association using 'company_name'
@company= @user.company.create(name: params[:company_name])
if @user.save
redirect_to users_path
else
render 'users/new'
end
end