ruby-on-rails - 设计,如何在自定义注册 Controller 中获取新创建的用户?

标签 ruby-on-rails devise

我正在尝试向使用设计的注册添加一些额外的逻辑。我有两个注册表单,其中一个具有用于通过 habtm 关系连接的另一个对象的附加字段。我已经扩展了设计注册 Controller 并创建了新对象(如果存在),但我不确定如何在此方法中获取新创建的用户。

在我的自定义 registrations_controller.rb 中:

class RegistrationsController < Devise::RegistrationsController
  def create
    unless params[:business].nil?
      @business = Business.new(params[:business])
    end
    super
    #@user.businesses << @business  #how can I implement something like this?
  end

end

最佳答案

我以前做过与此非常相似的事情。看看这个问题 Make a fields_for block conditional

有两种方法可以做到这一点。一种快速而肮脏,另一种则充分利用了 rails 。

方法一

首先在你的模型中,确保你有 accepts_nested_attributes_for :businesses然后在你的 Controller 中确保你有类似的东西

params[:user][:businesses] = [ params[:business] ]

方法二

您可能想做的一件事是利用您的模型来发挥您的优势。在您的 View 中使用 fields_for块允许您指定可以根据模型设置方式假设的关系。

仍然确保您有 accepts_nested_attributes_for :businesses在你的模型中

在您的 Controller 中,您需要进行一些更改。
def new
  resource = build_resource({})
  resource.businesses.build  # Inserts a blank object for business
  respond_with resource
end

现在不要触摸创建操作中的任何内容,因为您可以删除已添加的代码位。

在 View 中,您可以看到您的业务表单和注册表单。添加类似的东西。
<% form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  # some user form stuff
  <%= f.fields_for :business do |i| %>
    <%= render "/users/registrations/business", :form => i %>
  <% end %>
<% end %>

在保存时,您的 Controller 应该认识到您正在自动向用户添加业务。

您可能需要处理实际的格式和命名,但这使得在 Rails 中提交表单变得非常好用。它也符合保持 Controller 美观和纤薄的意识形态。

关于ruby-on-rails - 设计,如何在自定义注册 Controller 中获取新创建的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14650612/

相关文章:

ruby-on-rails - 如何在 Rails 中设计电子邮件确认后登录用户

ruby-on-rails - 使用 Devise 添加 TOS 协议(protocol)复选框

ruby-on-rails - 禁用设计登录重定向

ruby-on-rails - 使用特定的 RAILS_ENV 进行单个单元测试

ruby-on-rails - 将 Rails 环境暴露给 Webpacker

javascript - 升级到rails 3.2.9后无法专注于输入

ruby-on-rails - 跳过 ActiveAdmin 中特定成员操作的身份验证

ruby-on-rails - Rails应用程序中的AMQP订户

ruby-on-rails - Ruby on Rails 4 应用程序无法在 iframe 中运行

ruby-on-rails - 如何调试设计/管理员?