Has_many通过协会 - 查看?控制器?

时间:2016-05-03 03:49:20

标签: ruby-on-rails ruby-on-rails-4

我是Rails的新手,我正在构建一个用户个人资料可以申请工作的应用程序。我通过关联创建了一个has_many。但我找不到定义控制器和视图的方法。这是我的代码:

型号:

class Profile < ActiveRecord::Base
  has_attached_file :profileimg, :default_url => ":style/profile-img.jpg"
  validates_attachment_content_type :profileimg, content_type: /\Aimage\/.*\Z/
  belongs_to :user

  has_many :relationships
  has_many :jobs, through: :relationships
end

class Job < ActiveRecord::Base
  belongs_to :employer

  has_many :relationships, dependent: :destroy
  has_many :profiles, through: :relationships


end

class Relationship < ActiveRecord::Base
  belongs_to :profile
  belongs_to :job
end

PS:我可以在Rails控制台上创建关系,但它可以正常工作。

我该怎么写我的RelationshipsController?如何在我的作业页面上放置一个按钮,current_user.profile可以在该页面上申请该作业?

2 个答案:

答案 0 :(得分:0)

控制器只是app/controllers中的文件。只需在CLI上手动或jobs_controller.rb添加rails g controller Jobs即可。

视图进入app/views/jobs/。最好运行rails g scaffold Example来获得一整套模型,控制器和放大器。以视图为例或通过教程完成工作。

答案 1 :(得分:0)

您的观点应该显示如下:

Job            Apply For This Job

Job中创建一个成员路线,如下所示:

resources :jobs do
  member do
    post 'apply_for_job'
  end
end

当有人点击Apply For This Job按钮时,向上述路线发送AJAX请求。在此之前,我认为ProfileUser之间应该存在User has_one ProfileProfile belongs_to User之间的关系。所以在jobs_controller创建一个动作:

def apply_for_job
  @job = Job.find params[:id] #This should be in a before_filter
  @profile = current_user.profile
  @profile.relationships.create(job: @job)
  respond_to do |format|
    format.js
  end
end

然后在views中在jobs文件夹apply_for_job.js.erb中创建一个视图,并做出相应的回应,例如将Apply For This Job设为Successfully Applied。我没有处理上面的任何错误,所以你可以按照你的要求去做,但这应该让你有一个基本的想法。

希望这有帮助。