У меня есть следующие модели:
class FieldEntryValue < ActiveRecord::Base
belongs_to :field_entry
end
и
class FieldEntry < ActiveRecord::Base
belongs_to :field
belongs_to :media
has_many :field_entry_values, :dependent => :destroy
accepts_nested_attributes_for :field_entry_values, :allow_destroy => true
end
FieldEntriesController
имеет следующие методы:
def new
@field_entry = FieldEntry.new
session[:media_id] = params[:media_id]
session[:field_id] = params[:field_id]
@field_entry.field = Field.find(params[:field_id])
generate_fields(true)
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @field_entry }
end
end
def create
@field_entry = FieldEntry.new(params[:field_entry])
@field_entry.media_id = session[:media_id]
@field_entry.field_id = session[:field_id]
generate_fields(false)
respond_to do |format|
if @field_entry.save
flash[:notice] = 'FieldEntry was successfully created.'
format.html { redirect_to(@field_entry) }
format.xml { render :xml => @field_entry, :status => :created, :locati$
else
format.html { render :action => "new" }
format.xml { render :xml => @field_entry.errors, :status => :unprocess$
end
end
end
def generate_fields(do_build)
@ftype = @field_entry.field.field_type.name
if @ftype == 'string'
@field_entry.field_entry_values.build if do_build
@field_entry.field_entry_values[0].key='name'
elsif @ftype == 'url'
2.times{ @field_entry.field_entry_values.build } if do_build
@field_entry.field_entry_values[0].key='name'
@field_entry.field_entry_values[1].key='url'
elsif @ftype == 'imdb'
1.times{ @field_entry.field_entry_values.build } if do_build
@field_entry.field_entry_values[0].key='value'
end
end
И у меня есть партиал, который загружается новым и редактировать:
<% form_for(@field_entry) do |f| %>
<%= f.error_messages %>
<% f.fields_for :field_entry_values do |fv_f| %>
<p>
<%= fv_f.label :key %><br />
<%= fv_f.text_field :value %>
</p>
<% end %>
<p>
<%= f.submit 'Save' %>
</p>
<% end %>
В представлении должны отображаться переменные числа полей в зависимости от типа и с заданным ключом атрибута в качестве метки и значения для данных.
Для типа строки в качестве примера мне понадобится метка «Имя» (это должен быть ключ) и значение
Это работает в основном за исключением того, что "fv_f.label :key"
показывает строковый ключ, а не значение ключевого поля.
Как я могу показать значение @field_entry.field_entry_values.key
как метку на виде?
Как я могу сделать контроллер лучше / короче. Например, действительно ли мне нужно установить @field_entry.field_entry_values[0].key='name'
в new и метод create, чтобы отобразить его в представлении и сохранить в базе данных?
Спасибо за предложения;) Я новичок в Rails, надеюсь, я сделал это не слишком неправильно;)