带有f.select和options_for_select的form_for适用于一个属性但不适用于第二个

时间:2016-01-19 23:50:50

标签: ruby-on-rails ruby forms

这似乎是一个非常基本的问题,但我无法弄清楚我做错了什么。我有我的rails form_for和select和options_for_select。

:计划属性是根据所选内容正确创建的,但对于计划属性,它始终是"第一年"无论您为创建选择什么以及何时尝试编辑。它们基本相同,所以我不明白为什么一个有效而另一个无效。在此先感谢您的帮助!

创建表单:

<%= form_for @customer do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :phone %>
<%= f.text_field :phone %>
<%= f.label :year %>
<%= f.select :year, options_for_select([['1st Year', 1], ['2nd Year', 2], ['3rd Year', 3], ['4th Year', 4]]) %>
<%= f.label :plan %>
<%= f.select :plan, options_for_select([['15', 15], ['45', 45], ['75', 75], ['105', 105]]) %>
<%= f.submit%>
<%end%>

编辑表格:

<%= form_for @customer do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :phone %>
<%= f.text_field :phone %>
<%= f.label :year %>
<%= f.select :year, options_for_select([['1st Year', 1], ['2nd Year', 2], ['3rd Year', 3], ['4th Year', 4]]) %>
<% if current_user.role == "admin"%>
<%= f.label :plan %>
<%= f.text_field :plan %>
<%else%>
<p>Plan selected: <%=@customer.plan%></p>
<%end%>

<%= f.submit%>
<%end%>

customer_controller:

def create
    @customer = current_user.customers.create(customer_params)
    if current_user.role == "admin"
      redirect_to customers_path
    elsif current_user.role == "customer"
      redirect_to user_customer_path(current_user, @customer)
    else
      redirect_to '/'
    end
  end

  def update
    @customer.update(customer_params)
    if current_user.role === "customer"
      redirect_to customer_path(@customer)
    else
      redirect_to customers_path
    end
  end

private
  def customer_params
    params.require(:customer).permit(:name,:year,:email,:plan,:verification)
  end

1 个答案:

答案 0 :(得分:1)

所以我检查了我的rails控制台,发现它确实在工作!这意味着问题在于所选择的内容。我在评论中找到了解决方案:select doesn't show selected value

并且能够使用以下代码显示正确的选定值:

<%= f.select :year, options_for_select([['1st Year', 1.to_i], ['2nd Year', 2.to_i], ['3rd Year', 3], ['4th Year', 4]], selected: @customer.year) %>