我正在尝试将我拥有的几个 text_fields 中的一些字符串存储到一个数组中,然后将其保存到数据库中。我有一个名为“opening_hours”的列,我尝试使用如下虚拟属性将其分成 2 个不同的属性:
模型
class Venue < ActiveRecord::Base
attr_accessible :opening_hours, :start_time, :end_time
attr_writer :start_time, :end_time
def start_time
@start_time.nil? ? @start_time : opening_hours.to_s.split("-").first
end
def end_time
@end_time.nil? ? @end_time : opening_hours.to_s.split("-").last
end
end
这个想法是你输入一个 start_time 和一个 end_time ,如下所示:
看法
<%= form_for @venue do |v| %>
<p><%= v.label "Monday" %><%= v.text_field :start_time %>-<%= v.text_field :end_time %><p/>
<p><%= v.label "Tuesday" %><%= v.text_field :start_time %>-<%= v.text_field :end_time %><p/>
<p><%= v.label "Wednesday" %><%= v.text_field :start_time %>-<%= v.text_field :end_time %><p/>
<% end %>
该数组在 DB 中应如下所示:
{08-12|09-14|07-13}
用“|” 分隔一周中的不同日子。
我在控制器中尝试了几件事,例如:
控制器
class VenuesController < ApplicationController
def new
@venue = Venue.new
end
def create
@venue = Venue.new(params[:venue])
@total_time = params[:venue][:start_time]+"-"+params[:venue][:end_time]
@venue.opening_hours = @total_time.map {|t| [t.start_time, t.end_time]}
if @venue.save
redirect_to venue_path(@venue), :notice => "Success!"
else
render 'new'
end
end
但似乎没有任何效果......要么它只是从最后一天保存 start_time 和 end_time ,要么根本没有保存任何东西。