2017-08-31 65 views
1

我想在我的表单中使用选择框。当我尝试这种方式未定义的方法`合并'为:名称:符号

<%= s_form.select :experience_category_id, ExperienceCategory.all, :name,:id%> 

它给我的错误

未定义的方法合并为:名称:符号。

可能是因为我必须使用签名s_form.collection_select。但它不允许我多选。

当我尝试这种方式

<%= s_form.select(:experience_category_id, ExperienceCategory.all {|p| [ p.name, p.id ] }, 
              { :prompt => "Please select"}, 
              { :multiple => true, :size => ExperienceCategory.all.count })%> 

Supplier_controller

def new 
    @user = User.new 
    @user.build_supplier 
    @user.supplier.build_natural_address 
    end 
def create 
    @user = User.new(user_params) 
    @user.role = "supplier" 

     if @user.save 
     UserMailer.account_activation(@user).deliver_now 
     flash[:notice] = "Please check your email to activate your account" 
     redirect_to root_url 
     else 
     render :new 
     end 

    end 

。 。 。

def user_params 
     params.require(:user).permit(:email, :first_name, :last_name, :password, :password_confirmation, supplier_attributes: [:id, :company_name, :insurance_document, :profile_image, :national,:experience_category_id, natural_address_attributes: [:addressable_id, :addressable_scope, :addressable_type, :address_line_1, :address_line_2, :address_line_3, :town, :county, :postcode]]) 
    end 

供应商创建我不能看到任何问题的服务器,但与出:experience_catagory_id。 它不会抛出错误,但:experience_category_id保持nil。有什么可以解决的问题?我该如何解决这个问题?谢谢

+0

当我使用'.map'或'.collect'时,它返回一个枚举值,当我使用'.pluck'时,它返回一个所有类型的数组,它们都很好,但仍然是'p'是'nil' – Nejweti

+0

什么是轨道服务器日志和你的控制器? –

+0

我更新了问题 – Nejweti

回答

1

this link是你的问题

好的样品参考你的问题,如果你想选择一个选择

<%= s_form.collection_select :experience_category_id, ExperienceCategory.all, :id, :name, :prompt => 'Select' %> 

多选

<%= s_form.collection_select :experience_category_ids, ExperienceCategory.all, :id, :name, {}, {multiple: true'} %> 

在控制器请注意,尤其是在你的strong_parameters应该是

def user_params 
    params.require(:user).permit(
    :your_other_fields, 
    :experience_category_ids => [] 
end 
1
<%= f.select(:experience_category_id, ExperienceCategory.find(:all).collect {|u| [u.name, u.id]}, :prompt => 'Select') %> 
+0

在这篇文章上的标签不清楚,但......如果这是rails 3,那么'ExperienceCategory.find(:all)'与'ExperienceCategory.all'完全相同(因此与OP当前提议相同)。如果这是rails 4,则'ExperienceCategory.find(:all)'将会失败,因为'#find'现在强制'to_i'为基于整数的主键。无论哪种情况,如果没有明确地添加该选项,'select'将不允许多个选项 – engineersmnky

0

您没有使用正确的格式为每轨HTML阵列有助于

使用本

<%= f.select(:product_category_id, product.find(:all).collect {|u| [u.name, u.id]}, :prompt => 'Select') %> 

select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] }, {include_blank: 'None'}) 

在文档 Rails helpers

相关问题