Ruby on rails 4 使用“选择多个”显示多对多
现在,我正在构建一个表单,使用selectmultiple接受多对多。创建表单后,我试图显示在显示页面中收集的信息,但是我不知道如何在嵌入式ruby中显示这些数据。连接模型是CardTypesList 模型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
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 %>