0

労働者が仕事の入札を送信できるジョブボードを備えたRails 3アプリを構築しています。私は次の協会を持っています:

Job:
  has_many :bids
  has_many :workers, :through => :bid

Bid:
  belongs_to :job
  belongs_to :worker

Worker:
  has_many :bids
  has_many :jobs, :through => :bid

Show Job Page に労働者が入札できるフォームがあります。コントローラーには、次のものがあります。

Job Controller:
  def show
    @bid = current_worker.bids.build
  end   

Bid Controller:
  def create
    @bid = current_worker.bids.build(params[:bid])
    @bid.save
  end

上記のコードでは、job_id がないため、送信された入札は正しく保存されません。

1) job_id と worker_id の両方で入札を保存する正しい方法は?

2) (Job Controller の show メソッドから Bid Controller の create メソッドに job_id を渡すのに問題があります) - session 変数で job_id を渡すのは安全ですか?

参考までに、入札フォームは次のようになります。

<%= form_for(@bid) do |f| %>

  <%= f.label :min_price, "Minimum Price" %>
  <%= f.text_field :min_price %>

  <%= f.label :fee %>
  <%= f.text_field :fee %>

  <%= f.label :comments %>
  <%= f.text_area :comments, placeholder: "Comments..." %>
  <%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>
4

3 に答える 3

1

私はレールの初心者ですが、言う代わりに考えます

<%= form_for(@bid) do |f| %>

試す

<%= form_for(@job, @bid) do |f| %>

次に、入札コントローラーの新しいアクションで、次のようなことを行います

def new
  @job = Job.find(params[:job_id])
  @bid = @job.bids.build
end

次に、ルートで、次のような求人リソースの下に入札をネストする必要があります

resources :jobs do
  resources :bids
end

私が言ったように、私は初心者であり、これについて間違っているかもしれません。

于 2013-05-31T05:27:01.477 に答える
0

モデルの入札を確認してください。そのbelogsは2つのモデルです。したがって、多相テーブルとして作成する必要があります。次のようにモデルを再構成します

Bid:
  belongs_to :bidable, polymorphic: true

Job:
  has_many :workers, :through => :bid
  has_many :bids, :as => :bidable

Worker:
  has_many :bids, :as => :bidable
  has_many :jobs, :through => :bid
于 2013-05-31T06:12:25.747 に答える