1

私は3つのモデルを持っています

ユーザー: id 、名前

ジョブ: id、user_id、タイトル

アプリケーション: id、job_id、user_id

Job#show ページで、ジョブに応募していない、ジョブを作成していない、ログインしているユーザーにのみ表示されるボタンを配置しようとしています。私はデバイスを使用しています。次のように、これらのモデルで正しい関係を構築することができました(SOのおかげです)。

user.jobs #ユーザーが投稿したすべての求人を一覧表示する

jobs.applicants #求人中のすべての応募者を一覧表示する

質問は、フォーム (非表示) を job#show ページに送信し、job_id と user_id をアプリケーション モデルに入れるボタンを表示する if else 条件を定式化する方法です。

私は試した

<% 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

ユーザーはどのように仕事に応募しますか? どのコントローラーを使用していますか?

あなたのコードはユーザーに再度ログインさせます。

ユーザーがアプリケーション オブジェクトを作成する必要があるか、プロセスを完了するためにユーザーからの追加情報が必要か、またはジョブに保存されている情報にユーザーから既存の情報を送信する方向に沿っているか。

後者の場合、このようなことができます。

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 に答える
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 に答える