2011-10-18 9 views
0

先に注意してください。私は合計RoR n00bですが、私はプログラミングの経験があるので、私は基本的なのを取得します。私は複雑な検索エンジンを構築するために必要なアプリケーションを用意しています。基本的なレイアウトは、ガイド>>プロファイル>>メンターリング>>メンターエリアです。以下は、それぞれのモデルのコードと、次にビルドしようとしているコードです。私の問題は、私は適切なオブジェクト名を検索して、検索エンジンにmentor_areasを検索させることができないようです。RanSack複合オブジェクトの関係が構築されない...(メソッドが見つかりませんでしたエラー)

システムのセットアップ:

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 

MentorArea私のガイドコントローラで

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

    validates_uniqueness_of :mentor_area 
end 

私が持っている:私は

@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 %> 

私は、人がそこに関連付けられているというmentor_areasに対して検索するように、2番目のフィールドの正しい名前が何であるべきかを理解できないようです。

ありがとうございます!掻き回すコード

答えて

0

用に更新

私はそれがだと思う:

:profiles_mentorings_mentor_area_mentor_area_contains 

基本的に、それはあなたがあなたの検索フィールドに到達するために順番に一つ一つを通じて到達するために持っているテーブルについて考える必要があります。私はあなたのケースでは、ガイドのためのあなたの見解は、行く必要があります:プロファイル - >メンター - >メンター領域を検索するためのmentor_area?あなたのmentor_areaはプロファイルのみを持っています:メンタリングモデルを通して。最初に指導モデルを通らずに、直接mentor_areに行くことはできません。

また、

<%= f.label :guides_profiles_mentor_areas_mentor_area_contains %> 

がビューに本当に厄介になります。代わりにこれを代わりに言うことができます:

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

希望は動作します。私が正しくあなたのコードを読んでいる場合

+0

いや、残念ながらそれはどちらか動作しません。私は何かが私のモデルで正しく設定されていないのだろうかと思っています。私もmeta_searchの代わりにrails3.1とされているransackを試しました。まだ愛はありません。 – witharmshigh

4

は、あなたがしたい:

:profile_mentor_areas_mentor_area_cont 
+0

それ以外の何かが間違っている必要があります。なぜならそれは私もそうだと思っていますが、私は '定義されたメソッド "profile_mentor_areas_mentor_area_conts"を#' – witharmshigh

+0

の末尾に入れません。 – Ernie

+0

こんにちはアーニー、私は少し設定があります。あなたは私の質問を見てください:http://stackoverflow.com/questions/13369909/how-to-set-defaults-for-ransack-sorting 私はこれが修正するのに十分なはずだと思いますたぶん):) ありがとうございます。 – jlstr

関連する問題