0

devise を使用しており、ドロップダウン メニューで選択した値を関数に渡そうとしていますが、機能していません。データは user というモデルに格納されています。

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<%= f.select :role, options_for_select([["Job Seeker", "candidate"], ["Employer",  "employer"], ["Recruiter", "recruiter"]]) %>

<% if params[:role] == "candidate" %>
<div><%= f.label :travel %><br />
<%= f.text_field :travel %></div> 
<%  end 
if params[:role] == "employer" || params[:role] == "recruiter"
%>
<div><%= f.label :company %><br />
<%= f.text_field :company %></div>
<% end %>
<% end %>
4

1 に答える 1

0

あなたの条件はリソースオブジェクトを使用する必要があるように私には見えます。<% if resource.role == "employer" %>

resource.roleの現在の値を引数として渡したい場合がありますoptions_for_select

options_for_select([["Job Seeker", "candidate"], ["Employer",  "employer"], ["Recruiter", "recruiter"]], resource.role)

ユーザーに役割を選択してもらい、選択した役割に応じて異なるフィールドを表示するように思えます。私が間違っている場合は修正してください。あなたが投稿したコードの部分から、あなたのアプローチが何であるかを正確に伝えることは不可能です。問題を解決するには、次のようないくつかの方法があります。

  1. 選択したロールでフォームを投稿し、フォームを再レンダリングします。このプロセスは、検証エラーなどがある場合のフォームの再レンダリングに似ています。

  2. フォームを複数の段階に分割する

  3. javascript を使用して select の値が変更されたことを検出し、フィールドを表示および非表示にしてフォームを更新します。

于 2013-05-30T16:21:53.673 に答える