所以我有这个应用程序,我使用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技能类别的用户的列表的视图?
我敢打赌,解决方案非常简单......但我可能会错过一些明显的解决方案。你能指出我正确的方向吗?
谢谢!
答案 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(技能)