【问题标题】:displaying value from a many to many relationship显示多对多关系的价值
【发布时间】:2012-06-22 14:32:40
【问题描述】:

我试图显示多对多关系中的值

在我看来,我正在调用以下内容

schedule.opponents.name

这段代码没有显示任何错误,尽管它只是显示了“对手”这个词

在我具有belongs_to 关系的其他方法上,此方法似乎显示了我所追求的值

有什么建议吗?

class Opponent < ActiveRecord::Base
  has_many  :schedules
  has_many  :teams
  attr_accessible :name
end


class Schedule < ActiveRecord::Base
  has_and_belongs_to_many :opponents
  has_many :teams
  attr_accessible :location_id, :date, :opponent_id, :time, :for, :against, :event, :team, :home_or_away

【问题讨论】:

  • Paul,请分享您的模型(甚至是您模型的编辑版本)。我可以做出假设,但您没有提供足够的信息来给出深思熟虑的答案。
  • 该评论效果不佳:S
  • 你的关系搞砸了。尝试对手belongs_to :schedule 和计划has_many :opponents。
  • @MurifoX 解决了问题:)

标签: ruby-on-rails rails-activerecord entity-relationship


【解决方案1】:

当您进行has_and_belongs_to_many relashionship 时,您假设有 n 个模型到 n 个模型。因此,当您执行schedule.opponents 时,您正在检索Opponent 模型的对象数组,因此,您无法调用该模型的属性。
查看问题的一种简单方法是在控制台上输入:

schedule.opponents.last.name

【讨论】:

    【解决方案2】:

    当您执行schedule.opponents 时,您将获得属于schedule 的所有对手的数组。根据您的数据,该数组可能有零个、一个或多个元素。

    试试这个:

    <% @opponents = schedule.opponents %>
    <% @opponents.each do |opponent| %>
      <%= opponent.name %><br />
    <% end %>
    

    祝你好运!

    【讨论】:

    • 按照你的建议做会抛出这个错误 SQLite3::SQLException: no such column:对手.schedule_id: SELECT "opponents".* FROM "opponents" WHERE "opponents"."schedule_id" = 1跨度>
    • 在循环内尝试单数对手。
    • 你能发布你的模型和字段名称吗?您似乎没有正确设置关系/字段。
    猜你喜欢
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    相关资源
    最近更新 更多