C'est un formulaire de recherche qui présente un objet appelé critères qui a une période imbriqué objet avec commençant et fin attributs.
L'action dans le contrôleur est vraiment simple mais il charge les valeurs à partir d'objets imbriqués sur la forme et un nouveau rendu les mêmes valeurs avec des messages d'erreur si nécessaire.
Fonctionne sur les rails 3.1.
Le modèle:
class Criteria < ActiveRecord::Base
class << self
def column_defaults
{}
end
def column_names
[]
end
end # of class methods
attr_reader :period
def initialize values
values ||= {}
@period = Period.new values[:period] || {}
super values
end
def period_attributes
@period
end
def period_attributes= new_values
@period.attributes = new_values
end
end
Dans le contrôleur:
def search
@criteria = Criteria.new params[:criteria]
end
Dans l'assistant:
def criteria_index_path ct, options = {}
url_for :action => :search
end
De l'avis:
<%= form_for @criteria do |form| %>
<%= form.fields_for :period do |prf| %>
<%= prf.text_field :beginning_as_text %>
<%= prf.text_field :end_as_text %>
<% end %>
<%= form.submit "Search" %>
<% end %>
produit le HTML:
<form action="/admin/search" id="new_criteria" method="post">
<input id="criteria_period_attributes_beginning_as_text" name="criteria[period_attributes][beginning_as_text]" type="text">
<input id="criteria_period_attributes_end_as_text" name="criteria[period_attributes][end_as_text]" type="text">
Remarque: L'attribut d'action fourni par l'assistant et les attributs imbriqués format de nommage qui le rend si simple pour le contrôleur pour charger toutes les valeurs à la fois
double possible de [modèle Rails sans base de données] (http://stackoverflow.com/questions/315850/rails modèle sans base de données) –
dans rails 3, vous pouvez inclure ActiveModel :: Validations, comme beaucoup d'autres modules dans ce même espace de noms qui apportera des fonctionnalités ActiveRecord comme à vos modèles. Dans les rails 4, il y a aussi ActiveModel :: Model, qui inclut beaucoup d'entre eux pour vous faire sentir votre modèle (non-persistant ou personnalisé-persistant) comme un modèle ActiveRecord. – nandinga
La solution en 2016 http://stackoverflow.com/a/34354961/5310342 –