【问题标题】:Many to Many Relationship in Ruby on Rails, unable to created multiple records using Multiple Select FieldRuby on Rails 中的多对多关系,无法使用多选字段创建多条记录
【发布时间】:2021-01-04 09:19:16
【问题描述】:

我在两个模型(区域和列表)之间存在多对多关系。我正在尝试在列表表单上使用 fields_for 来多选区域并为每个选定区域创建一个区域化行。

我可以通过单个输入实现区域化连接的创建,但无法在下面进行多选操作。

任何线索都会很棒。谢谢。我猜我需要在 created 方法中为区域化表单中的每个选定区域创建一个循环。

上市模式

  has_many :regionalizations
  has_many :regions, through: :regionalizations
  accepts_nested_attributes_for :regionalizations

区域模型

  has_many :regionalizations
  has_many :listings, through: :regionalizations

区域化模型

  belongs_to :region
  belongs_to :listing
  accepts_nested_attributes_for :region

上市控制器

  def new
    @listing = Listing.new
    @listing.regionalizations.build
  end
  
  def create
    @listing = Listing.new(listing_params)
    @listing.user_id = current_user.id
    
    if @listing.save
      redirect_to @listing, notice: "Your Listing was created successfuly"
    else
      render :new
    end  
  end


  def listing_params
    params.require(:listing).permit(:name, :excerpt, :description, :email, :website, :phone_number, :user_id, :featured_image, :category_id, :regionalization_id,regionalizations_attributes: [:id, :region_id, :listing_id], regions_attributes: [:id, :name])
  end

上市表格

<%= form.fields_for :regionalizations do |regionalization_form| %>
    <%= regionalization_form.collection_select(:region_id, Region.all, :id, :name, {multiple: true}, {class: 'form-control'}) %>
<% end %>

【问题讨论】:

    标签: ruby-on-rails many-to-many accepts-nested-attributes


    【解决方案1】:

    因此,经过一番挖掘,并在 Ryan Bates 的一个非常老的视频和 Steve Polito 的更新版本的帮助下,我意识到了解决方案。上面的设置实际上允许我在我的表单中添加多个区域化。我只需要使用控制器循环构建方法。

    3.times { @listing.regionalization.build } 
    

    这表明我可以添加三个区域化,它们将在提交表单时独立创建。一旦工作,

    我知道我需要添加销毁每个表单输入的功能,并最终创建一些 javascript 来执行此操作。一旦我有了这个,我知道我也可以使用 Javascript 添加一个新字段,并且可以删除上面代码中的初始循环,因为用户现在可以添加和销毁区域化字段。

    这个链接从 steve 那里得到了很大的帮助,很高兴看到这种方式在不使用 gem 'cocoon' 或类似的嵌套字段的情况下这样做。

    http://railscasts.com/episodes/196-nested-model-form-part-1

    https://stevepolito.design/blog/create-a-nested-form-in-rails-from-scratch/

    Steve 提供了一个非常清晰的解决方案,也提供了很棒的脚本,并且还与 Rails 6 一起使用。谢谢大家。

    我希望这对任何可能遇到它的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多