Ruby on rails 茧具不工作嵌套形式

Ruby on rails 茧具不工作嵌套形式,ruby-on-rails,ruby-on-rails-4,devise,ruby-on-rails-3.2,cocoon-gem,Ruby On Rails,Ruby On Rails 4,Devise,Ruby On Rails 3.2,Cocoon Gem,我有一个新问题,试图用cocoon实现设计,但它并没有保存在数据库中。请帮帮我!!!:D 用户模型: class User < ActiveRecord::Base has_many :telefonos accepts_nested_attributes_for :telefonos, :reject_if => :all_blank, :allow_destroy => true devise :database_authenticatable, :reg

我有一个新问题,试图用cocoon实现设计,但它并没有保存在数据库中。请帮帮我!!!:D

用户模型:

class User < ActiveRecord::Base
  has_many :telefonos
  accepts_nested_attributes_for :telefonos, :reject_if => :all_blank,  :allow_destroy => true

   devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
我的应用控制器

Class ApplicationController < ActionController::Base

  protect_from_forgery with: :exception

  before_filter :configure_permitted_parameters, if: :devise_controller?

    protected

        def configure_permitted_parameters
             devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:nombre, :email, :password) }
            devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :current_password, :region_id, :ciudad_id, :nombre, telefonos_attributes: [:telefono, :user_id]) }
        end
     end
Class ApplicationController
我的编辑视图:

<h3>Edit <%= resource_name.to_s.humanize %></h3>

  <%= simple_form_for resource, :as => resource_name, url: registration_path(resource_name), :html => { :method => :put} do |f| %>

    <div class="form-group">
      <%= f.input :nombre, :autofocus => true, class: 'form-control' %>
      <%= f.association :region, :include_blank => false %>
      <%= f.association :ciudad, :include_blank => false %>
    </div>
    <h1>Telefono</h1>
    <div id="telefonos">
    <%= f.simple_fields_for :telefonos do |t| %>
        <%= render 'telefono_fields', :f => telefono %>
    <% end %>
    <div class="links">
      <%= link_to_add_association 'add telefono', f, :telefonos %>
    </div>
  </div>
<%= f.submit 'Update' %>
<% end %>
编辑
资源名称,url:registration\u path(资源名称),:html=>{:method=>:put}do | f |%>
true,类:'窗体控件'%>
假%>
假%>
电传
telefono%>
my_telefono_fields.html.erb

<div class="nested-fields">
  <%= f.input :telefono %>
  <%= link_to_remove_association "remove telefono", f %>


关于,

我以不同的方式做了同样的事情。我认为您正在获取未经许可的参数,因为应用程序控制器方法不起作用。但我有一个解决办法给你。首先在终端中运行此命令:

rails g devise:controllers users
您可以使用范围内的任何内容,而不是
用户。这意味着它将生成类似于以下内容的设备控制器
app/controllers/users/[all controllers]
。然后在路由文件中执行以下操作:

devise_for :users, controllers: {
    registrations: 'users/registrations'
  }
这将使用生成的
注册\u控制器
。现在,在生成的注册中,控制器可以这样做。以下方法将以注释形式编写,只需取消注释并根据您的需要进行编辑:

class Users::RegistrationsController < Devise::RegistrationsController
  before_filter :configure_sign_up_params, only: [:create]
  before_filter :configure_account_update_params, only: [:update]

protected


  def configure_sign_up_params
    devise_parameter_sanitizer.for(:sign_up){ |u| u.permit(:email, :password, :password_confirmation, :nombre) }
  end

  def configure_account_update_params
    devise_parameter_sanitizer.for(:account_update){ |u| u.permit(:email, :password, :current_password, :password_confirmation, :region_id, :ciudad_id, :nombre, telefonos_attributes: [:id, :telefono, :user_id], :_destroy) }
  end

这对我有用。希望这对您也有帮助。

telefonos\u属性中
您应该还有两个属性
id
\u destroy
。这只是为了你的信息。这可能是导致此问题的原因,也可能不是。试试看。您在控制台中是否有任何错误?您检查了吗?谢谢,但没有在控制台中生成错误!!:/您有任何教程?未经允许的参数:nombre、region\u id、ciudad\u id、telefonos\u属性
devise_for :users, controllers: {
    registrations: 'users/registrations'
  }
class Users::RegistrationsController < Devise::RegistrationsController
  before_filter :configure_sign_up_params, only: [:create]
  before_filter :configure_account_update_params, only: [:update]

protected


  def configure_sign_up_params
    devise_parameter_sanitizer.for(:sign_up){ |u| u.permit(:email, :password, :password_confirmation, :nombre) }
  end

  def configure_account_update_params
    devise_parameter_sanitizer.for(:account_update){ |u| u.permit(:email, :password, :current_password, :password_confirmation, :region_id, :ciudad_id, :nombre, telefonos_attributes: [:id, :telefono, :user_id], :_destroy) }
  end
def update_resource(resource, params)
  resource.update_without_password(params)
end