1

我有 3 个模型

用户: id ,名称

作业:id、user_id、title

应用程序:id、job_id、user_id

在 Job#show 页面中,我试图放置一个按钮,该按钮仅对尚未申请该工作、尚未创建该工作并已登录的人可见。我正在使用设计。我已经设法在这些模型中建立了正确的关系(感谢 SO),如下所示。

user.jobs #列出用户发布的所有职位

jobs.applicants #列出该工作的所有申请人

问题是如何制定 if else 条件,该条件显示将表单(隐藏)提交到 job#show 页面并将 job_id 和 user_id 放入应用程序模型中的按钮。

我试过了

<% if user_signed_in? %>
 <% if job.user_id = current_user.id %>
   <div style="text-align:center;" class="widget">
    <%= link_to(new_user_session_path, :class => "g-btn type_primary") do %>
      <i class="icon-external-link"></i> Apply for the job 
    <% end %>
   </div>
 <% end %>
<% end %> 

我似乎无法理解如何解决 object.id nil 的错误。

4

3 回答 3

2

你似乎错过了一个=标志。

你可以像这样改善你的 if 条件

<% if user_signed_in? && job.present? && job.user_id == current_user.id %>
    your logic here
<% end %>
于 2013-10-10T13:13:48.577 回答
1

试试这个

<% if user_signed_in? %>
  <% if job.user_id == current_user.id %> 
    <div style="text-align:center;" class="widget">
      <%= link_to "Apply for the job" new_user_session_path, :class => "g-btn type_primary" %>
    </div>
  <% end %> 
<% end %>

改变这条线可能会更好

<div style="text-align:center;" class="widget">

<div class="widget center">

并将一个名为的类添加center到相关的 css 表中

于 2013-10-10T13:07:52.163 回答
1

用户如何申请工作?使用什么控制器?

您的代码让用户再次登录,

用户是否需要创建应用程序对象,是否需要用户提供其他信息才能完成该过程,或者更倾向于将用户的现有信息发送到作业中存储的信息。

如果是后者,你可以做这样的事情。

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

<% if user_signed_in? %>
 <% unless job.user == current_user %>
   <div style="text-align:center;" class="widget">
    <%= link_to 'Apply', apply_job_path(job), method: :post %>
   </div>
 <% end %>
<% else %>
  <%= link_to 'Sign in to apply', new_user_session_path %>
<% end %>

然后在你的工作控制器中

def apply
  if Application.create job_id: params[:job_id], user: current_user
    redirect_to jobs_path,  notice: "You have applied, good luck!"
  else
    ... do something for failure... 
  end
 end 
于 2013-10-10T13:37:05.330 回答