У меня есть приложение на рельсы 3, где есть несколько регистраций (диагноз, пациент, лабораторный тест, сервис, клиент, пользователь, поставщик).Первоначально они будут заполнены путем заполнения базы данных.Требуется, чтобы коды описания были в смешанном регистре (заглавные слова), если либо 1. указано приложением (некоторые настройки конфигурации - еще не определены) 2. указано пользователем ввода данных
В настоящее время Iиметь модель, представление и контроллер для диагностики, который содержит два поля: 1. код (всегда с заглавной буквы) 2. описание (первое слово с заглавной буквы на основе значения check_box_tag)
В настоящее время я использую обратный вызов before_save вмодель для реализации преобразования, но я не могу заставить его работать, только когда check_box_tag не выбран, то есть игнорируется check_box_tag.
Я попытался изменить check_box_tag на check_box, добавив attr_assessor в модель (но неsqlite3 db, поскольку его не нужно хранить).
Это тоже не сработало.
Как мне это сделать?Как переопределить опцию использования флажка из внутреннего файла конфигурации приложения, что приводит к тому, что флажок будет «недоступен» или не будет отображаться, если в конфигурации приложения указано, что пользователь не может быть выбран?
Модель (Diagnostics.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
Контроллер (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
Просмотр (_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' это все еще игнорируется.
Как заставить это работать?
Заранее спасибо начинающему разработчику рельсов.