Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 4 使用“选择多个”显示多对多_Ruby On Rails 4_Many To Many - Fatal编程技术网

Ruby on rails 4 使用“选择多个”显示多对多

Ruby on rails 4 使用“选择多个”显示多对多,ruby-on-rails-4,many-to-many,Ruby On Rails 4,Many To Many,现在,我正在构建一个表单,使用selectmultiple接受多对多。创建表单后,我试图显示在显示页面中收集的信息,但是我不知道如何在嵌入式ruby中显示这些数据。连接模型是CardTypesList 模型 class Card < ActiveRecord::Base self.inheritance_column = nil validates :name, presence: true, uniqueness: {case_sensitive: false} has_many :c

现在,我正在构建一个表单,使用selectmultiple接受多对多。创建表单后,我试图显示在显示页面中收集的信息,但是我不知道如何在嵌入式ruby中显示这些数据。连接模型是CardTypesList

模型

class Card < ActiveRecord::Base
self.inheritance_column = nil
validates :name, presence: true, uniqueness: {case_sensitive: false}

has_many :card_type_lists
has_many :card_types, through: :card_type_lists
    accepts_nested_attributes_for :card_type_lists
end

class CardType < ActiveRecord::Base
has_many :card_type_lists
has_many :cards, through: :card_type_lists
end

class CardTypeList < ActiveRecord::Base
belongs_to :cards
belongs_to :card_types
    accepts_nested_attributes_for :card_type
end
这是我的控制器:

    class CardsController < ApplicationController
  def new
@card = Card.new
    @card.card_type_lists.build.build_card_type
  end

  def show
@card = Card.find(params[:id])
  end

  def create
    @card = Card.new(card_params)
    if @card.save
        redirect_to @card
    else
        render 'new'
    end
  end

  private

  def card_params
    params.require(:card).permit(:name, :set, {:card_types => []}, :color, :cost,      :rarity,:oracle,:value, :number_owned,:notes)
  end
end
class CardsController[]},:color,:cost,:rarity,:oracle,:value,:number_owned,:notes)
结束
结束
应该是:

class CardTypeList < ActiveRecord::Base
    belongs_to :card
    belongs_to :card_type #Singular
end
当您提到错误
时,没有这样的列:card\u type\u list.card\u types\u id
,通常意味着您在数据库中没有正确的列,或者您的引用不正确。看看它,这是你的联想(引用复数而不是单数)(固定在上面)


表格

您应该考虑的是将正确的数据发送到嵌套的模型

此时,您需要在任一模型中创建一些记录,并允许您为父模型中的其他模型定义“新”对象,将数据传递给子模型,如下所示:

card_types_lists
id | card_id | card_type_id | other | information | created_at | updated_at
#app/models/card.rb
Class Card < ActiveRecord::Base
    has_many :card_type_lists
    has_many :card_types, through: :card_type_lists

    accepts_nested_attributes_for :card_type_lists
end

#app/models/card_type_list.rb
Class CardTypeList < ActiveRecord::Base
    belongs_to :card
    belongs_to :card_type

    accepts_nested_attributes_for :card_type
end

#app/controllers/cards_controller.rb
def new
    @card = Card.new
    @card.card_types_lists.build.build_card_type
end
#app/models/card.rb
类卡片

数据

如果要正确显示关联数据,应尝试以下操作:

#app/views/cards/show.html.erb
<%= @card.card_types %>
#app/views/cards/show.html.erb

我将连接模型更改为singular,为添加了接受嵌套属性,并添加了构建行,但仍然得到了uninit常量错误。我在我的OP中添加了我的模式,我想我的属性类型在cards表中可能是错误的,所以我得到了页面渲染,但是现在,我原来的问题仍然悬而未决。我试过了,但它只是显示了大标签,而不是我试图存储/显示的实际数据数组。好吧,我终于得到了它!(完成所有建议的更改后)我的控制器需要将:card_types更改为:card_type_ids def card_params.require(:card).permit(:name,:set,{:card_type_ids=>[]},:color,:cost,:rarity,:oracle,:value,:number_owned,:notes)结束,然后在嵌入的ruby显示文件中(嵌入标记中)@card.card_types.each_index do | i |@card.card_types[i][“name”]结束谢谢你的帮助rick!我可能会有一些问题,稍后当我实施编辑,但我们将渡过这条河,当我们到达那里哈哈
class CardTypeList < ActiveRecord::Base
    belongs_to :card
    belongs_to :card_type #Singular
end
card_types_lists
id | card_id | card_type_id | other | information | created_at | updated_at
#app/models/card.rb
Class Card < ActiveRecord::Base
    has_many :card_type_lists
    has_many :card_types, through: :card_type_lists

    accepts_nested_attributes_for :card_type_lists
end

#app/models/card_type_list.rb
Class CardTypeList < ActiveRecord::Base
    belongs_to :card
    belongs_to :card_type

    accepts_nested_attributes_for :card_type
end

#app/controllers/cards_controller.rb
def new
    @card = Card.new
    @card.card_types_lists.build.build_card_type
end
#app/views/cards/show.html.erb
<%= @card.card_types %>