Ruby on rails Ruby on Rails接收内部服务器错误:参数应为数组(获取字符串)

Ruby on rails Ruby on Rails接收内部服务器错误:参数应为数组(获取字符串),ruby-on-rails,arrays,ruby-on-rails-3,ruby-on-rails-3.2,Ruby On Rails,Arrays,Ruby On Rails 3,Ruby On Rails 3.2,我在表单中有一个循环,我试图用相同的名称创建多个数据,但我的语法出现了错误 在同一个应用程序中,由于数组中的数字,我遇到了另一个质量分配错误的问题 <%= form_for [@hourable, @hour] do |f| %> <% (1..7).each do |i| %> <%= select_tag "hour[#{i}][day]", options_for_select(days_hours) %> <%= select_tag

我在表单中有一个循环,我试图用相同的名称创建多个数据,但我的语法出现了错误

在同一个应用程序中,由于数组中的数字,我遇到了另一个质量分配错误的问题

<%= form_for [@hourable, @hour] do |f| %>

<% (1..7).each do |i| %>
  <%= select_tag "hour[#{i}][day]", options_for_select(days_hours) %>
  <%= select_tag "hour[#{i}][open_time]", options_for_select([ ... %>
  <%= select_tag "hour[#{i}][open_time]", options_for_select([ ... %>

<% end %>

<% end %>
原来我有这个,

"hour"=>{
 "1"=>{"day"=>"Sunday","open_time"=>"6","close_time"=>"6"},
 "2"=>{"day"=>"Sunday","open_time"=>"6","close_time"=>"6"},
 "3"=>{"day"=>"Sunday","open_time"=>"6","close_time"=>"6"}
}
如何获得正确的阵列

谢谢

编辑:

控制器:

class HoursController < ApplicationController
  before_filter :get_hourable
  def new
    @hour = @hourable.hours.new
  end
  def create
    @hour = @hourable.hours.new(params[:hour])
  end

  private
  def get_hourable
    @hourable = params[:hourable].camelize.constantize.find_by_user_id(current_user)
  end

  def hourable_id
    params[(params[:hourable].singularize + "_id").to_sym]
  end
end
这是我的模型:

class Hour < ActiveRecord::Base

  attr_accessible :day, :open_time, :close_time, :days_attributes
  include IceCube
  belongs_to :hourable, polymorphic: true
  belongs_to :professional

  serialize :schedule, Hash
  serialize :hour, Hash

end
课时
试试这个:

<%= form_for [@hourable, @hour] do |f| %>

  <% 7.times do %>
    <%= select_tag "hour[][day]", options_for_select(days_hours) %>
    <%= select_tag "hour[][open_time]", options_for_select([ ... %>
    <%= select_tag "hour[][close_time]", options_for_select([ ... %>
  <% end %>

<% end %>


hour[]开始
在params[:hour]中生成一个数组。数组中的每个元素都将在
小时[]
后有键-在这种情况下,
:天
:打开时间
,和
:关闭时间

您的目标是获得正确的数组吗?@rajesco是的。我试着删除迭代,认为它会工作,但我得到的错误是多少天的价值?也显示控制器的内容。@RajeshCO我用控制器更新了我的帖子,你说的天和小时是什么意思?我无法找出“hour[day]”的值,因为我得到了一个内部服务器错误。我还在
中更新了我的表单的外观。实际上,select的
options\u用于填充select标记中的选项值。也请发布模型。使用此方法,我会得到以下错误:
内部服务器错误
参数'hour'的预期哈希(得到数组)
这是一个好兆头-提高参数或放入
绑定。撬动
,你就会看到你得到了想要的数组。现在,您必须在控制器中正确分配值。您只创建了一个对象,并将
params[:hour]
分配给它。这是行不通的,因为它是一个散列数组。下面是您需要的:
@hourable.hours来澄清:您想要创建7小时对象,对吗?您的控制器只创建一个。我编写的代码行将为用户输入的每套
:day
:open\u time
,和
:close\u time
提供一个小时的对象。当然,您需要确保,如果用户没有填写所有行,它仍然被正确处理。。。但这是下一步。我尝试并将
@hour=@hourabl.hours.new(params[:hour])
替换为
@hourable.hours你能看看这些参数并告诉我你现在得到了什么吗?也许这会帮助我们了解错误的根源。
class Hour < ActiveRecord::Base

  attr_accessible :day, :open_time, :close_time, :days_attributes
  include IceCube
  belongs_to :hourable, polymorphic: true
  belongs_to :professional

  serialize :schedule, Hash
  serialize :hour, Hash

end
<%= form_for [@hourable, @hour] do |f| %>

  <% 7.times do %>
    <%= select_tag "hour[][day]", options_for_select(days_hours) %>
    <%= select_tag "hour[][open_time]", options_for_select([ ... %>
    <%= select_tag "hour[][close_time]", options_for_select([ ... %>
  <% end %>

<% end %>