J'écris une application qui contient une base de données avec plusieurs tables et tables jointes et ainsi de suite ... les deux je travaille avec actuellement (et suis perplexe sur) sont ma table de pages et mes modèles table.Rails 3 has_one/has_many question
Maintenant, une page ne peut contenir qu'un seul modèle, mais un modèle peut contenir plusieurs pages.
Modèle pour la page:
class Page < ActiveRecord::Base
has_one :template
accepts_nested_attributes_for :template
end
Modèle pour modèle:
class Template < ActiveRecord::Base
has_many :pages
end
Lorsqu'un utilisateur crée une page, je veux qu'ils soient en mesure de choisir une mise en page, mais pour une raison quelconque la sélection la liste n'apparaît pas
HTML pour le spectacle:
<%= form_for(@page) do |page| %>
<% if @page.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@page.errors.count, "error") %> prohibited this page from being saved:</h2>
<ul>
<% @page.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= page.label "Page title" %><br />
<%= page.text_field :slug %>
</div>
<div class="field">
<%= page.label :active %>?<br />
<%= page.check_box :active %>
</div>
<%= page.fields_for :category do |cat| %>
<%= cat.label :category %>
<%= select :page, :category_id, Category.find(:all).collect{|c| [c.name, c.id] } %>
<% end %>
<%= page.fields_for :template do |temp| %>
<%= temp.label :template %>
<%= select :page, :template_id, Template.find(:all).collect{|t| [t.content, t.id] } %>
<% end %>
<div class="actions">
<%= submit_tag %>
</div>
<% end %>
Des raisons pour lesquelles la dernière sélection ne s'afficherait pas?
Merci d'avance pour toute l'aide!
Edit:
Tout ce que je devais faire pour résoudre le problème a été mis la logique du modèle dans mon contrôleur, puis appeler cet objet dans la vue et cela a fonctionné
Controller:
def new
@page = Page.new
@categories = Category.find(:all)
@templates = Template.find(:all)
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @page }
end
end
Afficher:
<div class="field">
<%= page.label :template %>
<%= page.select("template_id", @templates.collect { |t| [t.content, t.id] }, :include_blank => 'None') %>
</div>
Espérons que cela aide quelqu'un d'autre!
Je reçois cette erreur maintenant : méthode non définie 'all 'pour ActionView :: Template: Class – dennismonsewicz
J'ai trouvé mon problème! Je vais mettre dans la solution ci-dessus – dennismonsewicz