为什么Ruby on Rails中单选框总是不显示当前对象的值?

2026-04-11 19:162阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计291个文字,预计阅读时间需要2分钟。

为什么Ruby on Rails中单选框总是不显示当前对象的值?

以下是对给定内容的简化

这是 views/products/edit..erb 中的相关代码:%=form_for :product, url: { action: 'update', id: @product.id } do |f| end

以下是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, text_field, value_field) f.select(:"#{object}_id", select_options_with_create_new(object.pluralize, text_field, value_field, :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中单选框总是不显示当前对象的值?

本文共计291个文字,预计阅读时间需要2分钟。

为什么Ruby on Rails中单选框总是不显示当前对象的值?

以下是对给定内容的简化

这是 views/products/edit..erb 中的相关代码:%=form_for :product, url: { action: 'update', id: @product.id } do |f| end

以下是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, text_field, value_field) f.select(:"#{object}_id", select_options_with_create_new(object.pluralize, text_field, value_field, :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中单选框总是不显示当前对象的值?