Ruby on Rails, помощник форм с методом объекта

У меня есть модель с методом под названием date_string. Смысл этого метода заключается в возвращении форматированной строки даты, когда она используется в представлении общего ресурса. Вот код вида.

<div class="field control-group">
<div class="control-label">
  <%= f.label :business_hour , :date_string %>
</div>

Я ожидаю, что вызов f.label будет функционировать, как в этом API, с: business_hour - это объект, а: date_string - это метод. Однако единственное, что отображается в представлении, это строка "Date string" или "date_string".

Любая помощь в получении класса представления для вызова метода, а не свойства модели, будет принята с благодарностью.

Business_Hour code

class BusinessHour < ActiveRecord::Base
  attr_accessible :business_hourable_id,
              :business_hourable_type,
              :close_time, :day, :open_time,
               :order , :business_date
  belongs_to :business_hourable , :polymorphic => true

def date_string()
  if business_date.nil?
   return ''
 else
    return_string = business_date.strftime( '%a %b\  %e ,  %Y' )
 end
end

конец

Вот полный частичный код (shared/business_hours):

<div class="field control-group">
  <div class="control-label funkiness">
    <%= F.label :business_hour , :date_string %>
  </div>
  <div class="controls">
    <%= f.select :open_time, available_hours, :include_blank => true  %>
  </div>
  <div class="control-label">
   <%= f.label :open_time, 'Close Time' %>
  </div>
  <div class="controls">
   <%= f.select :close_time, available_hours, :include_blank => true  %>
  </div>
 </div>

Вот соответствующая часть _form <% = form_for (@some_show), html: {class: "form-horizontal pull-left"} do | f | %>... <% = f.fields_for: business_hours do | operating_time | %> <% = render: частичный => 'shared / business_hours',: locals => {: f => operating_time}%> <% end%>

И, наконец, вот действие по редактированию контроллера

# GET /some_shows/1/edit
def edit
  @some_show = SomeShow.find(params[:id])
end

1 ответ

Решение

Таким образом, решение, которое работало для меня, состояло в том, чтобы убрать date_string из моей модели и внедрить ее в качестве помощника. Затем я изменил свой частичный вид, чтобы он выглядел так:

<div class='field control-group hour_dropdown_2'>
 <div class='field control-group'>
  <div class="control-label">
    <label><%= get_business_hour_string(f) %></label>
  </div>
  <h4 class='no-break-h'>From</h4>
  <%= select :open_time, available_hours, :include_blank => false %>
  <h4 class='no-break-h'>To</h4>
   <%= select :close_time, available_hours, :include_blank => false %>
 </div>
</div>

Мои теги выбора по-прежнему отключены, и я не знаю, почему для своего парциального _адреса я получаю f.whither, но для парциального BusinessHour я ничего не получаю в виде помощников по форме.

Другие вопросы по тегам