0

has_many 関係を使用してフィルタリングされたオブジェクトでジオコーダー gem を動作させようとしています。

そのようです

user.rb
has_one :profile
has_many :roles

name:string

profile.rb
belongs_to :user

latitude,latitude:float, address:string, city:string

role.rb
belongs_to :user
name:string

私が抱えている問題は、役割をフィルタリングして id => 3 と言う必要があることです

だから私たちは持っています

@limitrole = User.includes(:profile, :roles).where('roles.id' => 3)

これは、限られた役割のオブジェクトを返します。ジオコードを含むプロファイルを取得します

@profiles = @limitrole.collect { |user| user.profile }

これは、ユーザーの役割に限定されたアドレスのオブジェクトを返します

しかし、これはうまくいきません

@findlocations = @profiles.near('city, country', 20) (city and country being arbitrary values)

それでもこれはうまくいく

@findlocations = Profile.near('city, country', 20)

@profiles は Profile (両方のオブジェクト) と同じである必要があります。@profiles がフィルター処理されているだけです。

これを機能させるにはどうすればよいですか?

4

1 に答える 1

0

これはレールシーではないかもしれませんが、これが私がそれを機能させる方法です

最初にフォームフィールドを取得する

@findaddress = params[:profile][:profileaddress] + ", " + params[:profile][:profilecity]

次に、役割に基づいてユーザーのリストを取得しました

@limituser = User.includes(:profile, :roles).where('roles.id' => 3)

次に、ジオコーダー (railscast #273) プラグインを使用して、フォーム (@findaddress) で指定された場所の近くにあるすべてのジオコーディングされた住所のリストを作成し、user_id を取得します。

@findlocations = Profile.near(@findaddress, 20).pluck(:user_id)

これで、フォーム フィールドで指定されたロールとアドレスでフィルター処理されたユーザーのリストを作成できます。

@filteruser = @limituser.where(:id => @findlocations) 
于 2013-01-23T19:02:25.320 に答える