Rails datetime_select:分配多参数属性时出错1次[赋值错误

时间:2014-08-07 16:00:43

标签: ruby-on-rails ruby-on-rails-4

如何获取datetime_select的参数进行保存?

错误参数:

{"utf8"=>"✓",
"authenticity_token"=>"/Tu18E4ubxp0XWcoLTdrm2B4Ho80PDH86dWwm9fvEMs=",
"post"=>{"title"=>"asdf",
"event_date(1i)"=>"2015",
"event_date(2i)"=>"8",
"event_date(3i)"=>"7",
"event_date(4i)"=>"15",
"event_date(5i)"=>"26",
"description"=>"asdf",
"published"=>"0"},
"button"=>""}

模特:

class Spree::Post < ActiveRecord::Base
  validates_presence_of :title, :description, :event_date

  def event_date
  end

  scope :published, lambda { where(:published => true) }
  scope :latest, order("created_at DESC").limit(3)
end

关联控制器代码:

def create
    @post = Spree::Post.new(post_params)
    if @post.save
      flash[:notice] = "Post saved successfully"
      redirect_to admin_posts_path
    else
      flash[:alert] = "There was an error saving your post"
      redirect_to :back
    end
end

观点:

<p><%= f.label :event_date, Spree::Post.human_attribute_name(:event_date) %></p>
<p><%= f.datetime_select :event_date %></p>

问题似乎是它试图存储多个值。我猜这个修复是通过添加到模型文件,对吗?

3 个答案:

答案 0 :(得分:0)

您是否允许event_date使用post_params? (我们不知道,因为您没有包含整个帖子控制器文件。)如果您还没有允许它们,您可能想尝试修改post_params看起来像:

class Spree::PostsController < ActionController::Base

  private

  def post_params
    params.require(:post).permit(:event_date)
  end

end

有关详细信息,请参阅http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html

编辑:实际上,考虑到您提供的错误消息片段,我对您的参数问题存在信心不足。不过,我仍然会保持这个答案。

答案 1 :(得分:0)

您必须明确允许每个参数部分

def post_params
  params.require(:post).permit("event_date(1i)","event_date(2i)","event_date(3i)","event_date(4i"),"event_date(5i)",:any,:other,:post,:fields)
end

答案 2 :(得分:0)

您应该确保您的字段是数据库中的日期时间。如果它是一个字符串,当您尝试保存datetime_select时,它将抛出此错误消息。