0

これは小さな質問です。私のスキーマには、学生テーブルと分類テーブルがあります。モデル/テーブルの関係は、私がそうする方法で接続されています

@student = Student.first.classifieds.all 

Railsコンソールで、この特定の学生のすべてのクラシファイド広告を取得します

[#<Classified id: 3, ad_content: "在BC附近BU也可以、需要女生一起租房子、看了几处、俩人去租非常合算、限女生", ad_title: "BU和BC旁边的房子求室友一起租 ", student_id: 16, created_at: "2013-09-17 19:20:43", updated_at: "2013-09-17 19:49:31", location: "Allston">, #<Classified id: 1, ad_content: "Malden Towers 宽敞客厅出租,附带阳台,窗外是公寓的花园,客厅可用窗帘或木板隔开, 每月4...", ad_title: "Malden Towers 客厅出租 400/月", student_id: 16, created_at: nil, updated_at: "2013-09-17 19:47:55", location: "Malden">] 

特定の条件でレコードをフィルター処理しようとしているため、この特定の条件を満たすレコードのみをビューに渡すことができるため、その特定のページに表示されます。

場所がmaldenと等しい場合のみレコードを表示したい。

私の students_controller.rb にはこれがあります

def malden_index
  @student = Student.first 
  for classified in @student.classifieds.all
    return classified if classified['location'] == 'Malden'
  end 

私はこれを私の見解に持っています

<%= classified.ad_content %>

このエラーが発生しています

undefined local variable or method `classified'

3つの質問があります

  1. ビューに条件を追加できますか? またはそれは私のコントローラーにある必要がありますか?
  2. 私のレコードは配列データ型で返されますか?
  3. 私のコードの問題は何ですか? (かなり単純だと思います)(分類は各レコードである必要があり、ロケーションキーがmaldenに等しい場合にのみレコードを返します)
4

4 に答える 4

1

まず、ビューでは、コントローラーで定義されたインスタンス変数にのみアクセスできます。そのため、forループはビューで到達可能なものを収集しません。

だからあなたはそれを修正することができます

def malden_index
  @student = Student.first
  @classifieds = @student.classifieds.where('location="Malden"')
end

あなたのビューでは、すべてを繰り返します@classifieds

ここで注意してください: これは完全にハードコードされています。index私はこれを次のように解決します: 別の方法を使用する代わりに、show(学生の) アクションを使用し、場所が指定されているかどうかを確認し、指定されている場合は、それに応じて広告をフィルタリングします。

それはこのようになります

def show
  @student = Student.find(params[:id])
  @classifieds = @student.classifieds
  if params[:location]
    @classifieds = @classifieds.where('location = ?', params[:location]
  end

終わり

次に、次のように URL を作成します/students/1?location=malden

次に、次のルートを追加するとconfig/routes.rb

get '/students/:id/:location', to: 'students#show' 

に改善できます/students/1/malden

于 2013-09-18T12:04:23.337 に答える
0
def malden_index
  @student = Student.first 
  @classified = @student.classifieds.find_by_location("Malden")

end 

ビューで:

<%= @classified.ad_content %>
于 2013-09-18T12:04:46.527 に答える
0

これを試して...

def malden_index
  @student = Student.first 
  @classified =  @student.classifieds.where(location: 'Malden').first
end

ビューで:

<%= @classified.ad_content %>  
于 2013-09-18T12:05:11.167 に答える