【发布时间】:2016-09-17 07:11:01
【问题描述】:
我们有两个模型,一个“设计用户”和一个“影响者”。影响者是用户,因此它必须有一个用户(从数据库的角度来看)。一个用户可以是多个其他事物。因此,我们希望能够在不成为影响者的情况下注册用户,并且我们希望在用户想要注册为影响者时注册用户。
我有这样的表格:
influencers/new.html.erb
<%= form_for @influencer do |i| %>
<%= i.fields_for(resource, as: resource_name, url: registration_path(resource_name)) do |u| %>
<div id="registration_fields">
<%= render 'devise/registrations/registration_fields', f: u %>
</div>
<% end %>
<div class='field'>
<%= i.label :twitter_handle %><br/>
<%= i.text_field :twitter_handle %>
</div>
<div class='field'>
<%= i.label :short_bio %><br/>
<%= i.text_area :short_bio %>
</div>
/views/devise/registrations/_registration_fields
<%= devise_error_messages! %>
<div class="field">
<%= f.label :first_name %> <br />
<%= f.text_field :first_name %>
</div>
<div class="field">
<%= f.label :last_name %> <br />
<%= f.text_field :last_name %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true %>
</div>
<div class="field">
<%= f.label :password %>
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em>
<% end %><br />
<%= f.password_field :password, autocomplete: "off" %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "off" %>
</div>
我们已经修改了 ApplicationHelper 和“新”方法,以便它可以毫无问题地呈现此设计表单。不幸的是,我们不知道如何正确地为我们的 InfluencersController 创建“create”方法。
这是我们收到的哈希:
Parameters: {..., "influencer"=>{"user"=>{"first_name"=>"buddy", "last_name"=>"king", "email"=>"bdking@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "twitter_handle"=>"@bdking", "short_bio"=>"None"}, "commit"=>"Join as influencer"
本质上,我们希望在处理影响者信息的同时处理用户信息。我们尝试从 InfluencersController#create 中调用 Devise::RegistrationsController.new.create 方法。然而,这也带来了自己的困难(即使有多次 hack,我们也会遇到不同的问题,例如缺少“@response”或缺少“response.env”或缺少“devise.mappings”)。
话虽如此,我们相信继承将允许我们在 create 函数中调用“super”。但是,我们不希望 InfluencersController 从 Devise::RegistrationsController 继承,因为这个控制器绝不是真正的 Devise 控制器。
我们有什么办法可以解决这个问题吗?
【问题讨论】:
标签: ruby-on-rails model-view-controller devise