Rails选择 - 选定的值

时间:2014-10-16 23:19:36

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

我有一个rails表单我正在为param使用select标签:contrat

这是我的代码

<%= f.label :contrat, "Type de contrat", class: "jobs-newtitles-two-half" %><br>

<%= f.select(:contrat, [["CDI", 1], ["CDD", 2], ["Contrat de Travail Temporaire ou d’intérim", 3], ["Freelance", 4], ["Stage", 5]], {}, {class: "form-control form-two-half"}) %>

当我在选择列表中选择CDI作为contrat并提交表单并转到显示页面时我有1而不是CDI为什么会这样

这是我的展示页

Type de contrat: <%= @job.contrat %>

但不是获得Type de contrat:CDI我得到Type de contrat:1

2 个答案:

答案 0 :(得分:1)

您的代码:

<%= f.select(:contrat, [["CDI", 1], ["CDD", 2], ["Contrat de Travail Temporaire ou d’intérim", 3], ["Freelance", 4], ["Stage", 5]], {}, {class: "form-control form-two-half"}) %>

它会将1保存到数据库而不是"CDI",因此在您的展示页面上您有1

如果您希望在展示页面上显示“CDI”,可以通过多种方式进行操作。


首先(不推荐,它可以打破干净的MVC方法)

将其添加到您的模型中

class Job < ActiveRecord::Base

 def contrat_string
   ## if string data type of contrat, you should quote e.g if contrat == "1"
   if contrat == 1
     "CDI"
   elsif contrat == 2
     "CDD"
   elsif contrat == 3
     "Contrat de Travail Temporaire ou d’intérim"
   elsif contrat == 4
    "Freelance"
   else
    "Stage"
   end
 end

end

并在展会页面

Type de contrat: <%= @job.contrat_string %>

第二

将方法添加到助手

module ApplicationHelper

  def contrat_to_s(contrat)
  ## if string data type of contrat, you should quote e.g if contrat == "1"
    if contrat == 1
      "CDI"
    elsif contrat == 2
      "CDD"
    elsif contrat == 3
      "Contrat de Travail Temporaire ou d’intérim"
    elsif contrat == 4
      "Freelance"
    else
      "Stage"
    end
  end

end

并在展会页面

Type de contrat: <%= contrat_to_s(@job.contrat) %>

第三(推荐)

您可以将数组的定义放在/config/locales/your_language.yml

如果您使用英语en.yml

,请执行此示例
en:
  contrat_strings: 
      1: CDI
      2: CDD
      3: Contrat de Travail Temporaire ou d’intérim 
      4: Freelance
      5: Stage

在你的助手上,例如application_helper.rb

module ApplicationHelper
  def contrat_selects 
    I18n.t(:contrat_strings).map { |key, value| [ value, key ] } 
  end

  def contrat_views(value)
     I18n.t(:contrat_strings)[value]
  end
end

在显示页面

Type de contrat: <%= contrat_views(@job.contrat) %>

表格

<%= f.select :contrat, contrat_selects %>

注意:我已经测试过了。一切都适合我。

答案 1 :(得分:0)

这应该有效:

<%= f.select :contrat, 
    options_for_select([["CDI", 1], ["CDD", 2], ["Contrat de Travail Temporaire ou d’intérim", 3], ["Freelance", 4], ["Stage", 5]]], params[:contrat]),
    {}, { :class => 'form-control form-two-half' } %>

How to make the f.select rails selected