0

最初に来る警告。私は完全な RoR n00b ですが、プログラミングの経験があるので、基本的なことは理解しています。複雑な検索エンジンを構築する必要がある構築中のアプリケーションがあります。基本的なレイアウトは、Guides >> Profiles >> Mentorings >> MentorAreas です。以下は、各モデルのコードと、作成しようとしているコードです。私の問題は、検索エンジンに mentor_areas を検索させるための適切なオブジェクト名を把握できないように見えることです。

システム設定:

rails -v :: Rails 3.1.1
ruby -v :: ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]
RanSack :: ransack (0.5.8) from git://github.com/ernie/ransack.git (at master) 

ガイド:

class Guide < User
end

ユーザー: (関連するもの)

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Virtual attribute for authenticating by either username or email
  # This is in addition to a real persisted field like 'username'
  attr_accessor :login

  # Setup accessible (or protected) attributes for your model
  attr_accessible :login, :username, :email, :password, :password_confirmation, :remember_me, :sex, 
    :location, :role, :first_name, :last_name, :home_town, :profile_attributes

  has_one :profile, :dependent => :destroy
  accepts_nested_attributes_for :profile, :allow_destroy => true

  has_and_belongs_to_many :roles

end

プロフィール

class Profile < ActiveRecord::Base
  belongs_to :user
  has_many :mentor_areas, :through => :mentorings
  has_many :mentorings

  accepts_nested_attributes_for :mentor_areas, 
     :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }, :allow_destroy => true

  validates_uniqueness_of  :user_id
end

メンタリング

class Mentoring < ActiveRecord::Base
   belongs_to :mentor_area
   belongs_to :profile

   validates_uniqueness_of  :profile_id, :scope => :mentor_area_id
end

メンターエリア

class MentorArea < ActiveRecord::Base
  has_many :profiles, :through => :mentorings
  has_many :mentorings

  validates_uniqueness_of  :mentor_area
end

私のGuides Controllerには次のものがあります:

@search_guides = Guide.joins(:roles).where("sex = :sex AND roles.name = :role",{:sex => current_user.sex, :role => 'guide'}).search(params[:search])
@guides_found = @search_guides.all 

そして私の見解(index.html.erb)では、次のものがあります:

<%= form_for @search_guides do |f| %>
    <%= f.label :username_cont %>
    <%= f.text_field :username_cont %><br />
    <%= f.label :guides_profiles_mentor_areas_mentor_area_cont %>
    <%= f.text_field :guides_profiles_mentor_areas_mentor_area_cont %><br />
    <%= f.submit %>
<% end %>

2 番目のフィールドの正しい名前を理解できないようです。これにより、ある人がそのプロファイルに関連付けられている mentor_areas に対して検索が行われます。

前もって感謝します!

RanSack コードの更新

4

2 に答える 2

0

私はそれだと思います:

:profiles_mentorings_mentor_area_mentor_area_contains

基本的に、検索フィールドにたどり着くために順番に 1 つずつ到達する必要があるテーブルを考える必要があります。あなたの場合、ガイドのビューは、メンターエリアを検索するために、プロファイル -> メンター -> mentor_area を通過する必要があると思いますか? あなたの mentor_area には、メンタリング モデルによるプロファイルのみがあります。最初にメンタリング モデルを経由せずに、mentor_are に直接行くことはできません。

また、

<%= f.label :guides_profiles_mentor_areas_mentor_area_contains %>

ビューでは本当に面倒に見えます。代わりにこれを言うことができます:

<%= f.label "Mentor Area" %>

うまくいくことを願っています。

于 2011-10-19T21:22:23.063 に答える