Rails: Link to partials?

ruby, ruby-on-rails

Solution

As far as Rails conventions go, the model itself is singular (User) but the table (users) and controller (UsersController) are both pluralized. This can cause a significant amount of confusion at first, and even after years of working with Rails I still make the mistake of trying things like 'user = Users.first' which is, of course, not valid, as often you get to thinking about table names instead of class names.

Also, for toggling the display of elements on a page, you probably want to use the link_to_remote method which uses AJAX for updates instead of a page refresh. If you're okay with a full page refresh, those actions will need to redirect_to something, such as the page referrer, or you will get a blank page or error since the page template does not exist.

Typically what you do is:

<ul>
  <li class="profile-tab">
    <%= link_to_remote 'Information', show_information_path %>
  </li>
  <li class="profile-tab">
    <%= link_to_remote 'Signature', show_signature_path %>
  </li>
</ul>

Then each action is as you have specified, however, the page template show_information.rjs would look like:

page.replace_html('extra_information', :partial => 'show_information')

Keep in mind you will need to have a placeholder to receive the partial contents, so simply wrap your optional sections in an element with a specific ID:

<div id="extra_information">
  <% if @is_on_show_information %>
    <%= render :partial => 'show_information' %>
  <% elsif @is_on_show_signature %>
    <%= render :partial => 'show_signature' %>
  <% end %>
</div>

Problem

At the moment I try to do following: I created several partials (i.e. _show_signature.html.erb) for my user. Now I want to show them on clicking a link. In my user controller, I created a new action: ``` def show_signature @is_on_show_signature = true end def show_information @is_on_show_information = true end ``` on my user show.html.erb i coded this: ``` <% if @is_on_show_information %> <%= render :partial => 'show_information' %> <% elsif @is_on_show_signature %> <%= render :partial => 'show_signature' %> <% end %> ``` and in my "navigationbar" i wrote: ``` <ul> <li class="profile-tab"> <%= link_to 'Information', show_information_path %> </li> <li class="profile-tab"> <%= link_to 'Signature', show_signature_path %> </li> </ul> ``` In my routes.rb I wrote: ``` map.show_information '/user-information', :controller => 'user', :action => 'show_information' map.show_signature '/user-signature', :controller => 'user', :action => 'show_signature' ``` now my problem: clicking on my "information" link will redirect me to http://localhost:3000/user-information (cause I told him this path in routes.rb - I think) and I get an error: ``` uninitialized constant UserController ``` But that's not what I want... My user show path is something like: http://localhost:3000/users/2-loginname (by coding ``` def to_param "#{id}-#{login.downcase.gsub(/[^[:alnum:]]/,'-')}".gsub(/-{2,}/,'-') end ``` in my user model) I want to link to somethink like http://localhost:3000/users/2-test/user-information. Any ideas how it will work? Any ideas why I get this error?

Original source