[英]Passing object ID across models Rails
我正在嘗試創建一個允許用戶創建和申請工作的應用程序,但似乎遇到了問題。
我無法將job_id傳遞到數據庫中的應用程序(作業應用程序)表中。
為了使此應用程序成功運行,我需要將job_id和user_id傳遞給用戶的申請表,以便他們提交工作申請時,此信息存儲在我的apps表中。 然后,工作負責人將能夠查看他們收到的申請。
我的模型中具有以下關聯:
class App < ActiveRecord::Base
belongs_to :job
belongs_to :user
class Job < ActiveRecord::Base
belongs_to :user
has_many :apps
has_many :applicants, :through => :apps, :source => :user
class User < ActiveRecord::Base
has_many :apps
has_many :jobs
has_many :jobs_applied_for, :through => :apps, :source => :job
在我的Jobs控制器的顯示頁面(用戶可以從中單擊“立即申請”以啟動應用程序的頁面)上定義,我具有以下內容:
def show
@job = Job.find(params[:id])
end
實際頁面上“立即申請”的鏈接為:
<%=link_to "Apply Now", new_app_path %>
在我的Apps控制器的新頁面上,我有:
def new
@user = current_user
@app = @user.apps.build
end
我的user_id傳遞完美,並出現在我的應用程序表中,但我完全對如何正確傳遞job_id感到困惑。
如果我錯過了任何可以編輯的問題以幫助您回答,請告訴我。
在此先感謝您的幫助!
您沒有在new_app_path鏈接中傳遞job_id。 嘗試將其更改為new_app_path(:job_id => @job.id)
,然后在您的控制器中添加@job = Job.find(params[:job_id])
假設您的路線將應用程序嵌套在作業中,則指向新應用程序頁面的鏈接應類似於
link_to 'apply now', new_app_job_path(@job)
在您的新操作中,您將有一個params[:job_id]
可用於設置@job
然后在表單上,您對表單的調用應如下所示
form_for [@job, @app] do |f|
...
這樣可以確保您的create動作還將具有:job_id參數,您可以在創建應用程序時使用它
你應該調用的作用是create
不new
。
更改link_to
代碼,如下所示:
<%=link_to "Apply Now", apps_path(:app => {:job_id => @job.id}), :method => :post %>
在您的控制器中:
def create
app = current_user.apps.build(params[:app])
if app.save
# handle success
else
# handle error
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.