У меня есть приложение для рельсов 3, где есть несколько регистраций (диагноз, пациент, лабораторный тест, клиент, пользователь, поставщик). Первоначально они будут заполнены путем посева базы данных. Требование для описания кодов, которые будут смешаны случай (капитализируются первое слово), когда либо 1. указано в приложении (некоторые настройки конфигурации - еще предстоит определить) 2. указанного пользователем ввода данныхRails 3 - как реализовать изменяющийся случай описаний на основе check_box_tag (не является частью модели) в обратном вызове before_save во внешнем классе
В настоящее время I есть модель, вид & контроллера для диагностики, который содержит два поля: 1. кода (всегда быть капитализированы) 2. описание (Первое слово капитализируется на основе значения check_box_tag)
в настоящее время я использую before_save обратный вызов в для реализации преобразования, но я не могу заставить его работать, только когда check_box_tag не выбран, т.е. игнорирует check_box_ta г.
Я попытался изменить check_box_tag на check_box, добавив attr_assessor к модели (но не sqlite3 db, поскольку он не требуется хранить).
Это тоже не сработало.
Как это сделать? Как переопределить опцию использования флажка из внутреннего файла конфигурации приложения, в результате которого флажок «недоступен» или не отображается, если конфигурация приложения не выбирается пользователем?
Модель (diagnosis.rb)
require 'DescriptionHelper'
class Diagnosis < ActiveRecord::Base
attr_accessible :code, description
string_correct_case = DescriptionHelper.new([:code, :description])
validates :code, :presence => true, :length => { :minimum => 4, :maximum => 4 }
validates :description, :presence => true
before_save string_correct_case
end
Обратный звонок в DescriptionHelper.rb
class DescriptionHelper
def initialize(attribute)
@attrs_to_manage = attribute
end
def before_save(record)
@attrs_to_manage.each do |attribute|
record.send("#{attribute}=", capitaliseWords(record.send("#{attribute}")))
end
end
private
def capitaliseWords(value)
value = value.mb_chars.downcase.to_s.gsub(/\b\w/) { |first| first.upcase }
end
end
Controller (diagnoses_controller.rb)
class DiagnosesController < ApplicationController
def new
@diagnosis = Diagnosis.new
end
def create
@diagnosis = Diagnosis.new(params[:diagnosis])
if @diagnosis.save
flash[:notice] = "Diagnosis created with params [#{@diagnosis.attributes.inspect}" #for debugging, once fixed will be just 'Diagnosis created.'
redirect_to @diagnosis
else
flash[:alert] = "Diagnosis not created."
render :action => "new"
end
end
.. other controller actions - edit, show, destroy
end
View (_form.html.erb)
<%= form_for(@daignosis) do |f| %>
<div class="field">
<%= f.label :code %>
<%= f.text_field :code %>
</div>
<div class="field">
<%= f.label :description %>
<%= f.text_field :description %>
</div>
<div class="field">
<%= check_box_tag("diagnosis_desc_dont_convert", 1, false) %><%= f.label "Leave as entered" %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Когда это выполняется в настоящее время, check_box_tag игнорируется.
При добавлении в модель attar_assessor: description_correctcase и изменении вида использования f.check_box 'description_correctcase' это по-прежнему игнорируется.
Как можно заставить это работать?
Заранее благодарим за проектирование рельсов.