【问题标题】:Nested attributes form not showing in devise views Rails 4嵌套属性表单未在设计视图中显示 Rails 4
【发布时间】:2016-07-11 10:17:53
【问题描述】:

我有一个应用程序,其用户模型可以有多个地址。我希望能够在用户通过嵌套属性注册时为其添加地址。我也在为用户模型使用设计。

型号:

class Address < ActiveRecord::Base
belongs_to :user

end
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

has_many :addresses

accepts_nested_attributes_for :addresses

end

注册控制器:

class Users::RegistrationsController < Devise::RegistrationsController
before_action :set_user, only: [:show]


def new
  resource = build_resource({})  
  resource.addresses.build
  respond_with_navigational(resource){ render_with_scope :new } 
 end

 def create
   super
 end



private 

def set_user
@user = User.find(params[id])

end

def user_params
params.require(:user).permit(:email, :password, :first_name,                  
:last_name, :phonenumber, :addresses_attributes => [:postcode,  
:housenumber, :streetname, :city, :town] )

   end
 end

注册视图中的表单字段:

   <%= f.simple_fields_for :addresses do |address|%>
  <%= address.input :housenumber %>
  <%= address.input :postcode %>
  <%= address.input :streetname%>
  <%= address.input :town%>
  <%= address.input :city%>
    <%end%>

【问题讨论】:

  • 你知道怎么做吗?我遇到了同样的问题
  • 不,我放弃了它并使设计与众不同,尽管在处理不同方面时我确实意识到我的自定义控制器实际上并没有被使用,它仍在使用设计控制器。我建议仔细检查是否使用了正确的控制器,因为我有一种感觉,那就是我的问题。

标签: ruby-on-rails ruby devise nested-forms cocoon-gem


【解决方案1】:

您需要将以下方法添加到您的 ApplicationController:

class ApplicationController < ActionController::Base
  # Your code

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_in) do |user_params|
      user_params.permit(:email, :addresses_attributes => [:postcode, :housenumber, :streetname, :city, :town])
    end
  end
end

这允许您允许设计模型的嵌套属性。请参阅 repo 页面并搜索“嵌套”以获取更多信息:

https://github.com/plataformatec/devise

【讨论】:

  • 我尝试添加它,我通读了 repo,但找不到任何似乎有效的东西。还有其他想法吗?
  • 你有没有得到这个工作?我几乎尝试做同样的事情......
【解决方案2】:

我知道这有点旧,但这可能会在将来拯救某人。 实现configure_sign_up_params 后,您必须在创建操作中使用它,因此您的Users::RegistrationsController 应如下所示:

class Users::RegistrationsController < Devise::RegistrationsController
    before_action :set_user, only: [:show]
    before_action :configure_sign_up_params, only: [:create]

    # more code bellow...
    protected

      def configure_sign_up_params
          devise_parameter_sanitizer.permit(
              :sign_up,
              keys: [:email, :password, :password_confirmation,
              # put any other keys in here                 
          ])
      end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 2012-11-15
    相关资源
    最近更新 更多