轨道虚拟属性错误。语法错误,意外的"=",期望keyword_end self.send(field_name) =



我在events表中有start_time:timestampsfinish_time:timestamps字段。所以我只想在这里存储几个小时和几分钟。

_form.html.erb

<%= f.time_select :start_time_string %>

我向模型添加了虚拟属性。

event.rb

  # Generates methods: start_time_string, finish_time_string
  #
  [:start_time, :finish_time].each do |field_name|
    define_method("#{field_name}_string") do
      self.send(field_name).strftime('%H:%M') if self.send(field_name)
    end
  end
  [:start_time, :finish_time].each do |field_name|
    define_method("#{field_name}_string=") do |time|
      self.send(field_name) = time.strftime('%H:%M')
    end
  end

但是我得到了错误:

syntax error, unexpected '=', expecting keyword_end self.send(field_name) = time.strftime('%H:%M') ^

为什么会这样?如果可能的话,你能为我提出一个更好的解决方案吗?

替换

[:start_time, :finish_time].each do |field_name|
    define_method("#{field_name}_string=") do |time|
      self.send(field_name) = time.strftime('%H:%M')
    end
  end

[:start_time, :finish_time].each do |field_name|
    define_method("#{field_name}_string=") do |time|
      self.send("#{field_name}_string=",time.strftime('%H:%M'))
    end
end

编辑

这将创建两种方法 start_time_string=finish_time_string= .

您可以将这些称为,

start_time_string = Time.now
finish_time_string = Time.now

@Kirti的答案是正确的。

但是,您的错误在于另一个事实,即您的time_select字段不是数据库中的Time字段。

看到这个相关的问题,有很多建议的解决方案。

相关内容

最新更新