2

所以我有这个应用程序,我在其中使用 HABTM 关联来确定“用户技能”;当创建新用户时(通过新用户视图),用户可以通过该视图上可用的一组HABTM 复选框声明他/她的技能,并使用表单...

我想要做的是有一个视图,我有基于不同技能的链接,例如:“警察”、“医生”、“音乐家”等。这些链接应该指向我可以展示给的其他视图访问者列表仅包含属于他们单击的特定类别的用户。

我的用户/技能模型(关联部分)如下所示:

#User Model

class User < ActiveRecord::Base
 has_and_belongs_to_many :skills

#Skill Model

class Skill < ActiveRecord::Base
    has_and_belongs_to_many :users

而且(如果有帮助的话)我的 HABTM 复选框如下所示:

<p> What Skills do you have?

<% for skill in Skill.find(:all) %>
<div>
  <%= check_box_tag "user[skill_ids][]", skill.id, @user.skills.include?(skill) %>
  <%= skill.name %>
</div>
<% end %>
</p>

假设我们拥有的技能是:例如“警察、医生、音乐家”......我如何在指向具有 X 技能的用户组的视图中创建链接,然后我可以使用什么代码呈现一些视图仅显示属于 X 技能类别的用户的列表?

我敢打赌,解决方案真的很简单……但我可能遗漏了一些明显的东西。你能指出我正确的方向吗?

谢谢!

4

2 回答 2

6

config/routes.rb 中

resources :skills

生成一个 SkillsControllerrails g controller skills并放在那里:

def index
  @skills = Skill.all
end

def show
  @skill = Skill.find(params[:id])
end

那么你的看法:

#app/views/skills/index.html.erb
<ul>
  <% @skills.each do |skill| %>
    <li><%= link_to skill.name, skill_path(skill) %></li>
  <% end %>
</ul>

#app/views/skills/show.html.erb
<h1>Users who have the <%= @skill.name %> skill</h1>
<ul>
  <% @skill.users.each do |user| %>
    <li><%= user.full_name %></li>
  <% end %>
</ul>
于 2012-06-21T09:11:42.383 回答
1

首先不要使用 has_and_belongs_to_many。这是一个指向 RoR 指南的链接,显示你应该如何做 has_many :through assosiation。http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

其次,如果您想向您的用户展示具有“x”技能的用户,只需使用技能#show 操作即可。

def show
  @skill = Skill.find params[:id]
  @users = @skill.users
end

在您查看的链接上,这将类似于 Skill_path(skill)

于 2012-06-21T08:22:40.423 回答