【发布时间】:2014-10-23 18:07:20
【问题描述】:
我已成功创建了一个has_many through 与我的两个模型的连接。总而言之,每个艺术家可以属于多个组,反之亦然:
# artist.rb
has_many :memberships
has_many :groups, through: :memberships
# membership.rb
belongs_to :artist
belongs_to :group
# group.rb
has_many :memberships
has_many :artists, through: :memberships
我想做的是设置一个 status 属性,该属性将是一个布尔值,并指示艺术家是否不再属于该组。因此,例如,如果艺术家离开了群组,他/她将被识别为 Past Member 布尔值,名为 status(true = current_member,false = Past_member)。
我不确定一些事情。首先是决定将该属性分配给哪个模型。都是三个吗?是 2/3 还是 1/3?
我遇到的第二个问题是创建一种方法,允许我在艺术家的编辑视图或他们所属的组中更改艺术家的成员身份。我希望做的是,如果从任一视图更改了一个,此更改将反映在两个模型上。
艺术家和团体展览的观点可能会相互反映,所以为了简洁起见,我只列出艺术家的展览观点:
艺术家展览视图
我唯一遇到的问题是尝试列出过去的组。我应该为这个特定场景设置范围还是方法?
<h3>Member of:</h3>
<hr>
<% @artist.groups.each do |group| %>
<%= artist.group.name %>
<% if artist.group.status == false %>
<h3>Past Member of: %></h3>
<hr>
<!-- <% Scope or Method that filters Past Groups %> -->
<% end %>
<% end %>
艺术家编辑视图
对于编辑视图,我似乎无法弄清楚的一件事是嵌套艺术家的每一组。我的语法可能有点偏离,但只是为了让您了解我正在尝试做的事情:
<%= form_for @artist do |f| %>
<h3>Memberships</h3>
<% @artist.groups.each do |group| %>
<%= f.group.radio_button :status, true %>
<%= f.group.label :status, 'Current Member', value: true %>
<%= f.group.radio_button :status, false %>
<%= f.group.label :status, 'Past Member', value: false %>
<% end %>
<br>
<%= f.submit %>
<% end %>
组编辑视图
我假设这看起来几乎与艺术家编辑视图完全相同,但在一定程度上颠倒了:
<%= form_for @group do |f| %>
<h3>Memberships</h3>
<% @group.artists.each do |artist| %>
<div>
<%= f.artist.radio_button :status, true %>
<%= f.artist.label :status, 'Current Member', value: true %>
<%= f.artist.radio_button :status, false %>
<%= f.artist.label :status, 'Past Member', value: false %>
</div>
<% end %>
<br>
<%= f.submit %>
<% end %>
如果需要任何控制器逻辑,我会全力以赴。
【问题讨论】:
标签: ruby-on-rails ruby model associations has-many-through