0

我在这个网站的帮助下建立了多对多的关系。
我已经在模型中添加了 has_and_belongs_to_many
现在我想在屏幕上显示来自该对象的数据
我假设我应该在 html.erb 中执行它
让我们说我想要它在索引表单和编辑/新表单中

我该如何介绍呢?谢谢。

编辑:
我有两个对象:
即人和状态 - 一个人可以有很多状态)
我想要一个屏幕,我可以在其中显示该人的所有状态,另一个屏幕可以在其中添加他的其他状态。
正如我提到的,我创建了这样的 rb 脚本(两者都适用)

class CreateStates < ActiveRecord::Migration
def change
  create_table :states do |t|
    t.string :name
    t.timestamps
  end
 end
end

和一个连接表

def up
  create_table 'persons_states', :id => false do |t|
  t.integer :persons_id
  t.integer :states_id
end

结束并在模型中添加 has_and_belongs_to_many :ingredients

如何更新我的 gui 代码?感谢

4

3 回答 3

1

如果你有一个 Person 可以有许多状态,那么它很简单:

模型 person.rb

has_many :states

状态.rb

belongs_to :person

您生成的迁移:

rails generate model State person_id:integer name:string
rails generate model Person name:string

如果您需要将person_id此外键添加到此人,只需执行以下操作:

rails generate migration Add_Person_ID_To_States person_id:integer
rake db:migrate

通常不需要has_and_belongs_to_many.

于 2012-04-27T17:25:58.153 回答
1

Kulgar 的回答涉及建立关系,这是正确的。有了这些,您可以在视图中显示如下信息:

<%= @person.name %>
<ul>
  <% @person.states.each do |state| %>
    <li><%= state.name %></li>
  <% end %>
</ul>

这假设您有一个适当的控制器操作,该操作设置@personPerson该类的一个实例。也许是这样的:

def show
  @person = Person.find(params[:id])
end

你可以更进一步,添加一个局部视图来显示 State 类,然后在你的视图中引用它:

<%= @person.name %>
<% @person.states.each do |state| %>
  <%= render state %>
<% end %>

这将使用 _state.html.erb 渲染部分并将局部变量状态传递给它。

所有这一切的重要部分是@person.states指与人相关的状态:)

于 2012-04-28T20:27:36.203 回答
1

你应该看看这个指南:协会 - 拥有并属于许多官方指南

如果没有与此关联绑定的模型/资源的名称,我将无法进一步帮助您。如果您想要更准确的答案,请提供。

好的,在您编辑问题之前已回答。

所以你想在你的 Person 和 States 模型之间建立一个“has_and_belong_to_many”关联。所以在你的“人”模型中你应该有:has_and_belongs_to_many :states。在您的“状态”模型中,您应该有: has_and_belongs_to_many :people (人的复数)。您与“has_and_belongs_to_many”关联的联接表必须是“people_states”,因为这是一个约定,您实际上没有选择权。

您还可以查看提供有用信息的官方文档。

于 2012-04-27T16:35:26.027 回答