ruby-on-rails – Ruby on Rails:为什么选择框不显示当前对象值?

发布时间:2020-09-21 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了ruby-on-rails – Ruby on Rails:为什么选择框不显示当前对象值?编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下是views / products / edit.html.erb中的相关代码:

<%= form_for(:product,:url => {:action => 'update',:id => @product.id}) do |f| %>
  <%= render(:partial => "form",:locals => {:f => f}) %>
  <%= submit_tag("Update Product") %>
<% end %>

来自views / products / _form.html.erb:

<%= select_with_new_option(f,:shop,:name,:id) %>

从helpers / products_helper.rb:

def select_options_with_create_new(objects,text_field,value_field,options={})
  object = objects.to_s.singularize
  all_objects = object.capitalize.constantize.all
  all_objects = all_objects.sort_by(&options[:order_by]) if options.has_key?(:order_by)
  select_options = all_objects.map{ |obj| [obj.send(text_field),obj.send(value_field)] }
  select_options << [wrap_create_new_option("create new #{object}".titleize),"new_#{object}"]
  options_for_select(select_options)
end

def wrap_create_new_option(str)
  ">> #{str} <<"
end

# By default,sorts by 'text_field'.
def select_with_new_option(f,object,value_field)
  f.select(:"#{object}_id",select_options_with_create_new(object.pluralize,:order_by => text_field))
end

我希望默认情况下选择框为@ product.shop_id,但这不是真的(第一个选项始终是默认值).

我错过了什么?

解决方法

好吧,我明白了.只需删除select_options_with_create_new方法中的options_for_select(select_options)即可.

options_for_select将2-d数组select_options组装成一个html选项字符串,但是,select表单帮助程序可以接受它,但不指定所选属性.只需将2-d数组作为第二个参数传递给select方法,它就会自动分配所选的数组.

总结

以上是编程之家为你收集整理的ruby-on-rails – Ruby on Rails:为什么选择框不显示当前对象值?全部内容,希望文章能够帮你解决ruby-on-rails – Ruby on Rails:为什么选择框不显示当前对象值?所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!