【问题标题】:Rails views based on HABTM Category基于 HABTM 类别的 Rails 视图
【发布时间】:2012-06-21 07:27:29
【问题描述】:

所以我有这个应用程序,我在其中使用 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 技能类别的用户列表?

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    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>
    

    【讨论】:

    • #太棒了!这就是我一直在寻找的:D 非常非常感谢!
    【解决方案2】:

    首先不要使用 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)

    【讨论】:

      猜你喜欢
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多