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 / routers.rb内:

resources :skills

でSkillsControllerを生成し、rails 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を使用しないでください。これは、has_many:throughassosiationを実行する方法を示すRoRガイドへのリンクです。http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

次に、「x」スキルを持つユーザーに表示する場合は、skills#showアクションのみを表示します。

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

そして、これを表示するためのリンクでは、skill_path(skill)のようになります。

于 2012-06-21T08:22:40.423 に答える