我正在尝试创建一个允许用户创建和申请工作的应用,但似乎遇到了问题。
我无法将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
在我的乔布斯控制器的显示页面上定义(用户可以点击“立即申请”以启动应用程序的页面)我有以下内容:
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完美传递并出现在我的apps表中,但我完全不知道如何正确传递job_id。
如果我错过了任何可以编辑到这个问题的内容以帮助您回答,请告诉我。
提前感谢您的帮助!
答案 0 :(得分:1)
您没有在new_app_path链接中传递job_id。尝试将其更改为new_app_path(:job_id => @job.id)
,然后在控制器中添加@job = Job.find(params[:job_id])
答案 1 :(得分:0)
假设您的路线在应用内部嵌套应用,您指向新应用程序页面的链接应该类似于
link_to 'apply now', new_app_job_path(@job)
在您的新操作中,您将拥有params[:job_id]
可用于设置@job
然后在表单上,您对表单的调用应该看起来像
form_for [@job, @app] do |f|
...
这可确保您的创建操作还具有:job_id参数,您可以在创建应用程序时使用该参数
答案 2 :(得分:-1)
您应该调用的操作是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