关于多对多关系的“创建新条目”页面

时间:2013-11-16 19:21:41

标签: ruby-on-rails ruby ruby-on-rails-3.2 many-to-many has-many-through

我是新的rails用户。这可能是一个非常基本的问题,但我需要帮助

我正在创建一个具有Bands表,节日表和多对多关系的Participations表的应用程序。我的模型如下:

class Band < ActiveRecord::Base
  attr_accessible :year, :genere, :name, :country
  has_many :participations
  has_many :festivals, :though => :participations
end

class Festival < ActiveRecord::Base
  attr_accessible :city, :name, :country
  has_many :participations
  has_many :bands, :through => :participations
end

class Participation < ActiveRecord::Base
  attr_accessible :year
  belongs_to :band
  belongs_to :festival
end

当我使用rails server启动我的应用程序时,我可以正常访问localhost:3000 / band和/ festivals,并且新的乐队页面可以正常运行。当我访问localhost:3000 /参与时,它正常加载(并显示一个包含ID和年份的空表)但点击新参与会显示以下错误:

undefined method `bands_id' for #<Participation:0xba1a5760>

Extracted source (around line #16):

13: 
14:   <div class="field">
15:     <%= f.label :bands_id %><br />
16:     <%= f.number_field :bands_id %>
17:   </div>
18:   <div class="field">
19:     <%= f.label :festivals_id %><br />

Trace of template inclusion: app/views/participations/new.html.erb

Rails.root: /home/User/apps/festnum

我是新的rails用户,我不确定如何更改参与表的视图控制器。 谢谢!

PD:我还想知道如何在参与创建页面中添加一个下拉菜单,其中包含已经创建的节日和乐队。

编辑:上一期已经解决。但是,我仍然在寻找一种方法,在参与创建页面中创建一个下拉菜单,其中包含已经创建的节日和乐队,如果它可以与节日名称而不是id更好。另一个问题:当我访问创建新参与页面时,我填写了节日数据和我已经创建的乐队的字段(两个字段的ID 1,我在我的数据库中使用了SELECT语句并确保了这些条目存在)我得到以下错误:

  

没有身份证无法找到节日。

我很确定错误在这里:(在参与控制器处)

def create
@participation = Band.new(params[:band])
@participation.festivals << Festival.find(params[:festival_id])

respond_to do |format|
  if @participation.save
    format.html { redirect_to @participation, notice: 'Participation was $
    format.json { render json: @participation, status: :created, location:$
  else
    format.html { render action: "new" }
    format.json { render json: @participation.errors, status: :unprocessab$
  end
end

你能帮我一次吗?

1 个答案:

答案 0 :(得分:0)

该字段的名称必须是单数:

14:   <div class="field">
15:     <%= f.label :band_id %><br />
16:     <%= f.number_field :band_id %>
17:   </div>

(你有<%= f.number_field :bands_id %>