assiciatedレコードが特定のcreteriaを満たすレコードを検索します指定された場所から50マイル先の投稿。私は例を探しましたが、必要なものは見つけられませんでした。私は2つの方法で問題を解決しようとしましたが失敗しました。私はRailsの初心者で問題を数えていませんが、他のhas_oneモデルを使うと便利かもしれません。Railsの3 has_oneのモデルは、どのように私はモデルのポストを持って
は、私が試した:
posts_controller.rb
def index
if params[:saddress].present?
@locations = Location.near(params[:saddress], 50, :order => :distance)
for location in @locations
@posts << location.post
end
else
@posts = Post.all
end
index.html.erb
<h1>Events</h1>
<fieldset>
<legend>Find event</legend>
<%= form_tag(posts_path, :method => "get") do %>
<%= label_tag(:saddress, "Address:") %>
<%= text_field_tag :saddress, params[:saddress] %> <br/>
<%= label_tag(:sactivity, "Activity type:") %>
<%= select_tag :sactivity, options_from_collection_for_select(Activity.all, "id", "name", params[:sactivity]) %>
<%= submit_tag "Поиск"%>
<%end%>
</fieldset>
<%if @user%>
<%= link_to "Новое событие", new_post_path %>
<%end%>
<table>
<tr>
<th>Created</th>
<th>Author</th>
<th>Event</th>
<th>Address</th>
<th>Activity type</th>
</tr>
<% for post in @posts.sort.each %>
<%if post%>
<tr>
<td><%= post.created_at %></td>
<td><%= post.person.name %></td>
<td><%= link_to post.name, post %></td>
<td><%if post.location%><%= post.location.address %> <%end%></td>
<td><%= post.activity.name %></td>
</tr>
<%end%>
<%end%>
</table>
それがエラーになった:あなたが持っている
NoMethodError PostsControllerの中#インデックスあなたがそれを期待していなかったときには無名のオブジェクトです! Arrayのインスタンスが想定されている可能性があります。 nilを評価中にエラーが発生しました。 < <
どうか間違ってください。たぶんこれのための他の簡単な方法があります。
はまた、私はposts_controller.rbでこれを試してみました:この場合
if params[:saddress].present?
@locations = Location.near(params[:saddress], 50, :order => :distance)
@posts = Post.find(:all, :include => [:location], :conditions => ["locations.id in ?", @locations])
else
@posts = Post.all
end
を私はSQLに問題がありました。
あるU 4の答えをありがとうございました。私はあなたの例のように変更を加えましたが、私はまだ問題があります。しかし、全く異なる:投稿#指数の例外ArgumentErrorライン#23を上昇/home/mike/Blog/blog/app/views/posts/index.html.erbを表示 :ActiveRecordを持つNilClassの 比較::協会:: BelongsToAssociation失敗 –
問題が解決しました。私は、すべての「場所」が「投稿」と関連しているわけではないという問題がありました。どうもありがとうございました。 –