我正在構建一個Rails 3應用程序,其中有一個工作板,工作人員可以在其中提交工作投標。我有以下協會: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
我有一個窗口顯示工作頁面,其中工人可以提交出價。在控制器中,我有以下幾點:
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_id從Job Controller show方法傳遞給Bid Controller創建方法時遇到問題) - 在會話變量中傳遞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 %>
你的'bids_controller#create'方法不應該調用'new'而不是'build'嗎?爲什麼不在你的'form_for(@bid)'中簡單地添加'<%= f.hidden_field:job_id,@ job.id%>'? – coreyward
將job_id作爲隱藏字段傳遞不安全/安全。提交表單時,用戶可以使用螢火蟲或其他程式來更改job_id。 – Krishna
如果他們可以競標任何工作,那麼這並不重要。如果在作業ID方面有限制,你可能應該在服務器端進行驗證。 – coreyward