Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 即使我从预定义的下拉列表中选择了一个选项,也会创建重复的名称_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails 即使我从预定义的下拉列表中选择了一个选项,也会创建重复的名称

Ruby on rails 即使我从预定义的下拉列表中选择了一个选项,也会创建重复的名称,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,大家好,我正在尝试使用RubyonRails设计来创建一个用户所属的新公司。虽然我可以在字段_下为创建关联的公司对象,但即使我从预定义的下拉列表中选择了一个选项,也会创建具有重复名称的新公司对象。没错,我应该能够从下拉列表中选择该选项。如何修改代码,以便从下拉列表中选择并使用选项,而不是创建具有重复名称的新对象 我的代码如下所示:- #new.html.erb <% resource.build_company %> <%= form_for resource, as: re

大家好,我正在尝试使用RubyonRails设计来创建一个用户所属的新公司。虽然我可以在字段_下为创建关联的公司对象,但即使我从预定义的下拉列表中选择了一个选项,也会创建具有重复名称的新公司对象。没错,我应该能够从下拉列表中选择该选项。如何修改代码,以便从下拉列表中选择并使用选项,而不是创建具有重复名称的新对象

我的代码如下所示:-

#new.html.erb

<% resource.build_company %>
<%= form_for resource, as: resource_name, url: registration_path(resource_name), :html => {class: "ui small form"} do |f| %>

   <%= f.fields_for :company do |builder| %>
     <%= builder.select :name, Company.all.collect{ |p| [p.name, p.id] }, {prompt: "Company"}, :class => "company_options ui fluid search selection dropdown"  %>
   <%end%>

<%= f.submit "Sign up" %>

#companies_controller.rb

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

  protected

  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:lastname, :firstname,company_attributes:[:name]])
  end
end

#user.rb

class User < ApplicationRecord
  belongs_to :company  
  accepts_nested_attributes_for :company
end


#company.rb

class Company < ApplicationRecord
  has_many :users
end

不必构建新公司并接受新公司的嵌套属性,只需允许选择公司id:


并从您的用户模型中删除:company line的accepts_nested_attributes_.

hey spickerman,谢谢您的回复!如果我想在公司不存在的情况下选择添加一个新公司,或者从预定义的下拉列表中选择一个公司,我将如何相应地修改代码?@KengHong:请针对更改或扩展的要求提出一个新问题。因为原来的问题解决了。一个新的问题会比这篇评论引起更多读者的注意。
# in your view
<%= f.collection_select :company_id, Company.all, :id, :name %>

# in your controller
def configure_sign_up_params
  devise_parameter_sanitizer.permit(:sign_up, keys: [:lastname, :firstname, :company_id])
end