【问题标题】:rails edit form showing wrong attributerails编辑表单显示错误的属性
【发布时间】:2014-10-12 14:07:06
【问题描述】:

实际上 Rails 正在做它应该做的事情,但我想改变它。

我的旅行表格有一个城市名称字段,在表格的代码中列为:city_id(该名称用于在保存旅行之前查找城市。)

因为当我将@trip 传递给表单以编辑行程时,此字段称为:city_id,Rails 显示城市ID,而不是城市名称。我该如何更改?

城市:410

我想要:

城市:美国旧金山

旅行表单视图:

<%= form_for @trip do |f| %>

<%= f.label :city_id, "City" %>
<%= f.text_field :city_id, options = { id: "navbar-search-input", class: 'form-control', placeholder: 'San Francisco, United States' } %>

<br>

<%= f.label :start_date %>
<%= f.date_select :start_date %><br>

<%= f.label :end_date %>
<%= f.date_select :end_date %><br>


<%= f.submit "Add trip" %>
<% end %>   

当我将参数列入白名单时,我将字符串名称转换为城市 ID

:city_id => City.find_by_display(params[:trip][:city_id]).id

在我的城市模型 City.display = "City name, Country name"

那么如何让编辑表单显示 City.display 而不是 City.id?

【问题讨论】:

  • 您对新操作和编辑操作使用相同的表单?
  • 是的,唯一改变的是提交按钮上的文字

标签: ruby-on-rails


【解决方案1】:

我认为更好的方法是使用选择来最小化您的代码,但是如果您不想更改 UI,那么 您只需要在编辑操作中在新动作中做与你正在做的相反的事情。在您的编辑操作中,只需分配 city_id 的值,这样当表单加载时它就会显示该字符串

def edit
  @trip = Trip.find(params[:id])
  @trip.city_id = City.find(@trip.city_id).name #your logic to change city_id to its name
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多