基于HABTM类别的Rails视图

时间:2012-06-21 07:27:30

标签: ruby-on-rails ruby has-and-belongs-to-many

所以我有这个应用程序,我使用HABTM协会来确定"用户技能&#34 ;;创建新用户(通过新用户视图)后,用户可以通过该视图中可用的一组 HABTM复选框声明他/她的技能。

我想做的是根据不同的技能来查看我的链接,例如:"警察","医生","音乐家&# 34;这些链接应该指向其他视图,我可以向访问者显示属于他们点击的特定类别的仅用户的列表。

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

#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>

让我们说一下我们拥有的技能:&#34;警察,医生,音乐家&#34;例如...如何在一个视图中创建链接,指向具有X技能的用户组,然后使用什么代码可以呈现一些显示仅包含属于X技能类别的用户的列表的视图?

我敢打赌,解决方案非常简单......但我可能会错过一些明显的解决方案。你能指出我正确的方向吗?

谢谢!

2 个答案:

答案 0 :(得分:6)

config / routes.rb 中:

resources :skills

使用rails g controller skills生成一个SkillsController并放在那里:

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>

答案 1 :(得分:1)

首先不要使用has_and_belongs_to_many。以下是RoR指南的链接,显示您应该如何执行has_many:通过assosiation。 http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

其次,如果您想向您的用户展示具有'x'技能,那么只需要显示技能#show action。

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

在您查看的链接上,这将类似于skill_path(技能)