Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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/9/git/24.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
Mysql 如何将选定值从一个表列保存到另一个表列_Mysql_Ruby On Rails_Database_Simple Form - Fatal编程技术网

Mysql 如何将选定值从一个表列保存到另一个表列

Mysql 如何将选定值从一个表列保存到另一个表列,mysql,ruby-on-rails,database,simple-form,Mysql,Ruby On Rails,Database,Simple Form,我是Rails新手,正在努力学习。在我的简单表单中,我创建了一个下拉选择,其中包含从名为professions的表中生成的数据。这部分工作正常,我可以选择多个值。我使用的是mysql数据库 单击submit按钮时,我需要它将所选值保存到另一个名为users的表中名为my_professions的列中。我不知道该怎么做。 我得到这个错误 我的表格 <%= simple_form_for @user, url: wizard_path, method: :put do |f| %> &

我是Rails新手,正在努力学习。在我的简单表单中,我创建了一个下拉选择,其中包含从名为professions的表中生成的数据。这部分工作正常,我可以选择多个值。我使用的是mysql数据库

单击submit按钮时,我需要它将所选值保存到另一个名为users的表中名为my_professions的列中。我不知道该怎么做。 我得到这个错误

我的表格

<%= simple_form_for @user, url: wizard_path, method: :put do |f| %>
<%= collection_select(:f, :professions_id, Profession.where.not(name: nil), :id, :name, {:multiple => true}, {:class=>'js-example-basic-multiple', :id=>'jsmultipleddd'}) %>
<%= f.submit "Save", :class => 'btn blue'  %> 
<% end %>
应用程序\u控制器.rb

class User < ApplicationRecord

has_many :professions
accepts_nested_attributes_for :professions

serialize :my_professions, Array
end
class Profession < ApplicationRecord
belongs_to :user
end
def user_params

  params.require(:user).permit(:gender,:practitioner_website, :public_health_insurance, clinic_images: [], professions: [])

end
def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:gender, :practitioner_website, :public_health_insurance, clinic_images: [], professions: []])
  devise_parameter_sanitizer.permit(:account_update, keys: [:gender, :practitioner_website, :public_health_insurance, clinic_images: [], professions: []]) 
end

首先去掉
接受:professions的嵌套属性。您不需要为此嵌套属性

然后去掉
序列化:my_professions,Array
。是一种将复杂数据存储在字符串列中的传统方法。您不需要也不希望这样做,因为关联应该存储在ActiveRecord的联接表中,而不是数组列中。这就是AR的工作原理,也是关系数据库的工作原理

相反,您需要的是一个连接模型。您可以通过以下方式生成:

rails g model user_profession user:belongs_to profession:belongs_to
运行迁移。然后在用户和专业之间设置:

class User < ApplicationRecord
  # ...
  has_many :user_professions
  has_many :professions, through: :user_professions
end

class Profession < ApplicationRecord
  # ...
  has_many :user_professions
  has_many :users, through: :user_professions
end
在SimpleForm中使用帮助器:


太好了,非常感谢您的详细回答,非常感谢:-)
<%= f.collection_select :profession_ids, Profession.all, :id, :name, multiple: true ... %>
<%= f.association :professions, ... %>
def user_params
  # don't jam this into one super long unreadable line
  params.require(:user)
        .permit(
          :gender, :practitioner_website, :public_health_insurance, 
          clinic_images: [], profession_ids: []
        )
end