Passing an instance of one object to another


I'm working on my first Rails app. It's a redesign for a magazine
site. I have a class for the articles and a class for issues. I've
set up a has_many/belongs_to relationship between the two so that
every article belongs to a particular issue.

Now I'd like to set it up so that a new article cannot be added UNLESS
you have already chosen the issue that it is to be added to. I'd like
to set something up like
"[:article])" but I don't know how
to create an action/method that would allow me to set the
selected_issue variable and then pass that into the create method on
the article controller.

Could someone lend some assistance here?


you got it right. you can call
@issue.articles.create( params[:article] ) to get a new article that
is already saved and associated with the issue. you can also do params[:article] ) if you want to get a new
article object but not save it yet.

see here:

A common way to do this is for your "create article" form to have a
select field for issue_id that allows the user to select from
available issues.

In your view:

   <% form_for :article do |f| %>
      <% select :issue_id, Issue.find(:all).collect {|p| [, ] } %>
   <% end %>

Then in your controller,

   @article = new Article(params[:article])
       ...blah blah

This will automatically assign the article to the selected issue.

If you want to ensure that the article is linked to a valid issue, add
to your model:

   class Article < ActiveRecord::Base
     belongs_to :issue
     validates_presence_of :issue