0

私は、このように学生モデルに接続されている分類済みモデルを持っています

分類された.rb

belongs_to :student

私の学生モデルでは

has_many :classifieds

クラシファイド テーブルには以下が含まれますa column for student_id

Railsコンソールに向かうとき

次のようにして、その特定の学生レコードの新しい分類を作成できます

Student.find(19).classifieds.create(:ad_title => "blah", :ad_content => "blah", :location => "blah")

レコードは学生の観点で作成されたため、学生 ID が自動的に生成されます。

今問題は、ビューに新しいメソッドと作成メソッドと新しいフォームを備えた分類コントローラーがあることです

クラシファイド広告の観点から新しい広告を作成しています ここにフォームがあります

<div>
新广告: <br><br>

<%= simple_form_for @advertisement do |f| %>
    <%= f.input :ad_title, label: "Title" %><br>
    <%= f.input :ad_content, label: "Content"%><br>
    <%= f.input :location, label: "Location"%><br>
    <%= f.input :student_id, label: "Your Student ID"%><br>
    <%= f.button :submit, "Add an Advertisement" %>

<% end %>
</div>

問題は、その特定のレコードがインデックスに表示されるためには、student_id が存在する必要があり、私のユーザーは自分の ID を知らないことです。

フォームを使用して生徒の立場で分類を作成するにはどうすればよいですか

私は学生のコントローラーに行き、このようなメソッドを追加することを検討しています

def create_classified_ad
     @student = Student.find(params[:id])
     @classified = @student.classified.create(params[:classified])
end 

デバイスを使用しているので、ユーザーセッションはありますか? セッションがどのように機能するのか完全にはわかりません。ログイン後に特定の生徒を見つけて、その生徒にフォームからの入力を使用して案内広告を作成させて、レコードが正しく作成されるようにしますか?

質問は、フォームを使用してフックアップされたテーブルにデータを正しく挿入する方法に似ていますか? (単純な関係のないテーブルにデータを挿入するだけではありません)

4

1 に答える 1

2

student_idフォームからを渡すべきではありません。devise セッションがある場合は、以下にアクセスできる必要がありますcurrent_user

def new
  @classified = current_user.classifieds.build
end

def create
  @classified = current_user.classifieds.build(params[:classified])
  if @classified.save
    # do something
  else
    # handle failure
  end
end

インデックスでは、次のことができます。

def index
  @classifieds = current_user.classifieds.all
end

これはすべて、devise セッションがあることを前提としています。そうでない場合は、次のように学生を取得します。

@student = Student.find(params[:student_id])
@classified = @student.classifieds.build

ユーザーの下の分類用のネストされたルートを設定します。

resources :users do
  resources :classifieds
end

これにより、パラメーターから学生を取得できますstudent_id。ルートは次のようになります: new_student_classified_path(@student).

于 2013-09-19T14:00:27.247 に答える