将数组传递给f.select ruby-on-rails

将数组传递给f.select ruby-on-rails,ruby-on-rails,ruby,Ruby On Rails,Ruby,在我的rails应用程序的views/cards/_表单中,我有一个f.select字段的代码: <%= f.select :tag_speciality, options_for_select(@subdomain.tag_speciality), {}, {class: 'form-control'} %> 当我转到表单并选择任何选项时,例如“Professor de Yoga”,然后保存,我得到的结果是: [] 而不是: [“瑜伽教授”] 这是我的控制器: def索引 @

在我的rails应用程序的views/cards/_表单中,我有一个f.select字段的代码:

<%= f.select :tag_speciality, options_for_select(@subdomain.tag_speciality), {}, {class: 'form-control'} %>
当我转到表单并选择任何选项时,例如“Professor de Yoga”,然后保存,我得到的结果是:

[]
而不是:

[“瑜伽教授”]

这是我的控制器:

def索引
@cards=Card.all
结束
def创建
@card=@user.cards.new card_参数
回应待办事项|格式|
如果@card.save
format.html{从子域路径(@subdomain.id)重定向到卡片,注意:“卡片已成功创建”。}
format.json{render:show,status::created,location:@card}
其他的
format.html{render:new}
format.json{render json:@card.errors,status::unprocessable_entity}
结束
结束
结束
def更新
回应待办事项|格式|
如果@card.update(卡片参数)
format.html{从子域路径(@subdomain.id)重定向到卡片,注意:'卡片已成功更新。}
format.json{render:show,status::ok,location:@card}
其他的
format.html{render:edit}
format.json{render json:@card.errors,status::unprocessable_entity}
结束
结束
结束
#永远不要相信来自恐怖网络的参数,只允许白名单通过。
def卡参数
参数要求(:卡片)。允许(
:姓名,
:电话,
:电邮,
:封面,
:出版了吗,
:子域_id,
:域名_id,
:profile_id,
:是团结,
:tag_专业,
:标记位置,
用户标识:[]
)
结束

结束
由于您的标记是一个数组列,因此需要使用控制器中的数组方法分配数据

@card.tag_speciality.push(card_params[:tag_speciality])
@card.save

当然,您还需要修改其他属性的分配。顺便说一下,您可以在服务器日志中看到哪里出了问题。在这种情况下,您应该看到数据库拒绝了提交。

因为您的标记是数组列,所以您需要在控制器中使用数组方法分配数据

@card.tag_speciality.push(card_params[:tag_speciality])
@card.save
当然,您还需要修改其他属性的分配。顺便说一下,您可以在服务器日志中看到哪里出了问题。在这种情况下,您应该看到数据库拒绝了提交。

同上@EJ2015

加上

@card.tag_speciality.push(card_params[:tag_speciality])
@card.save
到您的
创建

respond_to do |format|
      if @card.tag_speciality.push(card_params[:tag_speciality]) && @card.save
        format.html { redirect_to cards_from_subdomain_path(@subdomain.id), notice: 'Card was successfully created.' }
        format.json { render :show, status: :created, location: @card }
      else
        format.html { render :new }
        format.json { render json: @card.errors, status: :unprocessable_entity }
      end
    end
同上@EJ2015

加上

@card.tag_speciality.push(card_params[:tag_speciality])
@card.save
到您的
创建

respond_to do |format|
      if @card.tag_speciality.push(card_params[:tag_speciality]) && @card.save
        format.html { redirect_to cards_from_subdomain_path(@subdomain.id), notice: 'Card was successfully created.' }
        format.json { render :show, status: :created, location: @card }
      else
        format.html { render :new }
        format.json { render json: @card.errors, status: :unprocessable_entity }
      end
    end


显示您的控制器代码您是否将:tag_位置放在控制器中的允许参数中?是的,刚刚添加了控制器,tag_位置已经在我的控制器中的允许参数中,看起来问题在于它是一个数组:true字段,如果它是一个简单的字符串字段,这将是正常保存…您的意思是向我们显示迁移文件中的tag_speciality列吗?只是您向我们显示了tag_位置。是的,抱歉,刚刚更正,tag_Speciality的迁移文件您的控制器代码如何将:tag_位置放在控制器的允许参数中?是的,刚刚添加了控制器,tag_位置已在我的控制器的允许参数中,看起来问题在于它是一个数组:true字段,如果它是一个简单的字符串字段,它将正常保存…您的意思是向我们显示迁移文件中的tag_speciality列吗?只是你给我们看了tag_的位置。是的,抱歉,刚刚更正,tag_Speciality的迁移文件Anks for answer,在控制器中我可以使用你建议的代码的什么地方?将在“def卡参数”中?它将在您的创建和更新操作中。你可以按照@ravi的建议去做。谢谢你的回答,我可以在控制器的什么地方使用你建议的代码?将在“def卡参数”中?它将在您的创建和更新操作中。你可以按照@ravi的建议去做。太好了,在创建时它可以工作:),但在更新时我该怎么做呢?我试过:“如果@card.tag\u speciality.push(card\u params[:tag\u speciality])&&&card.update(params)”,但没有成功!!问题是,当您执行@card.update(params)时,您再次将字符串值从params直接分配给数组列。您可以使用与create方法相同的方法,首先将值分配给属性,然后保存对象?我如何在控制器中设置它们,我是否应该就此提出另一个问题?很好,在创建时它可以工作:),但在更新时我该怎么做?我试过:“如果@card.tag\u speciality.push(card\u params[:tag\u speciality])&&&card.update(params)”,但没有成功!!问题是,当您执行@card.update(params)时,您再次将字符串值从params直接分配给数组列。您可以使用与create方法相同的方法,首先将值分配给属性,然后保存对象?我如何在控制器中设置它们,我是否应该就此提出另一个问题?