【问题标题】:Passing object ID across models Rails跨模型传递对象 ID Rails
【发布时间】:2012-06-26 15:22:28
【问题描述】:

我正在尝试创建一个允许用户创建和申请工作的应用程序,但似乎遇到了问题。

我无法将 job_id 传递到我的数据库中的应用程序(工作申请)表中。

为了让这个应用程序成功运行,我需要将 job_id 和 user_id 传递给用户的申请表,这样当他们提交他们的工作申请时,这些信息就会存储在我的应用程序表中。然后,工作所有者将能够查看他们收到的申请。

我的模型中有以下关联:

 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 完美传递并出现在我的应用程序表中,但我完全不知道如何正确传递 job_id。

如果我错过了可以编辑到此问题中以帮助您回答的任何内容,请告诉我。

提前感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1


    【解决方案1】:

    您没有在 new_app_path 链接中传递 job_id。尝试将其更改为new_app_path(:job_id =&gt; @job.id),并在您的控制器中添加@job = Job.find(params[:job_id])

    【讨论】:

      【解决方案2】:

      假设您的路线将应用程序嵌套在作业中,您指向新应用程序页面的链接应该类似于

      link_to 'apply now', new_app_job_path(@job)
      

      在您的新操作中,您将拥有一个params[:job_id],您可以使用它来设置@job

      然后在表单上,​​您对表单的调用应该是这样的

      form_for [@job, @app] do |f|
        ...
      

      这确保您的创建操作也将有一个 :job_id 参数,您可以在创建应用程序时使用该参数

      【讨论】:

        【解决方案3】:

        您应该调用的操作是 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-16
          • 1970-01-01
          相关资源
          最近更新 更多