Ruby on rails Rails虚拟属性错误。语法错误,意外'=';,应为关键字\u end self.send(字段\u名称)=

Ruby on rails Rails虚拟属性错误。语法错误,意外'=';,应为关键字\u end self.send(字段\u名称)=,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我在events表中有start\u time:timestamps和finish\u time:timestamps字段。所以我只想在这里储存几小时和几分钟 \u form.html.erb <%= f.time_select :start_time_string %> # Generates methods: start_time_string, finish_time_string # [:start_time, :finish_time].each do |fi

我在
events
表中有
start\u time:timestamps
finish\u time:timestamps
字段。所以我只想在这里储存几小时和几分钟

\u form.html.erb

<%= f.time_select :start_time_string %>
  # 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\u time\u string=
finish\u time\u string=

你可以称之为

start_time_string = Time.now
finish_time_string = Time.now

@科蒂的回答是正确的

然而,您的错误在于另一个事实,即您的
time\u select
字段不是数据库中的
time
字段


请看,有许多建议的解决方案。

Oopps!!让我们看看OP的反应。你用答案打败了我,但我一直在看。:)你继续。。我要去。。感到困倦。:)它不起作用<代码>1多参数属性赋值错误[赋值错误[2014,3,5,22,45]开始时间字符串(未定义的方法'klass'用于nil:NilClass)]稍早一点,我为我的
开始时间:时间列设置了
时间
类型。但在此之后,不仅时间存储在数据库中,而且年、月、日也存储在数据库中。所以我在这里发现了同样的问题:。建议之一是将列类型更改为
时间戳
。是的,使用
:datetime
:timestamp
start_time_string = Time.now
finish_time_string = Time.now