I understand the basic CRUD scaffold setup. I'm trying to figure out
the best way to implement the default index behavior with a model on
every page as navigation. I'm having a conflict implementing both
List.all and List.new on the same page.
For example, in create new, a basic call to the controller would
include:
<%= form_for @list do |form| %>
<label>name:
<p><%= form.text_field :name %></p>
</label>
<p><%= form.submit %></p>
<% end %>
The controller is:
def new
@list = List.new
end
The problem I have is how to also show the List.all on the same page.
The DEF index uses @lists = List.all for the function. I can't invoke
@list on the same page to both equal List.new and List.all.
Is the best practice to create a different method in the controller
(set it as a before_filter so I can show on all views) to show all?
I've created the following to test it out at in the controller:
before_filter :nav_show_lists
def nav_show_lists
respond_with(@nav_lists = List.all)
end
Then it is invoked in the application.html.erb view:
<% @nav_lists.each do |list| %>
<li><%= link_to "#{list.name}", list_url(list) %></li>
<% end %>
You could set @lists and @list in the new action (they are separate
vars), even though you stated you couldn't. However, if I understand
what you're trying to achieve (assign @lists for all views) then a
before filter is fine. You can place it in a specific controller or the
application controller (so it's available for all pages in your app, as
it sounds like it's used in Navigation).
You should think about caching, so you're not hitting the DB each time
an action is called. There are caching schemes out there to look into.
This applies to all newbies: It's important to get your words right. If you're not going to do this, or you can't, then use more words rather than less and show actual code. Sentences like "a model on every page for navigation" don't make sense. Use your own words rather than technical ones. It's always better.
This applies to all newbies: It's important to get your words right. If you're not going to do this, or you can't, then use more words rather than less and show actual code. Sentences like "a model on every page for navigation" don't make sense. Use your own words rather than technical ones. It's always better.
I agree with this in principle, but it's important to remember that a lot of our "technical" words have real-life definitions: a model may be found in a hobby store, or on a catwalk... (I'm too sexy for your Rails, too sexy...)