[Ruby on Rails 3] How to 3 model associations..

I asked a question on stackoverflow.com but did not get a wanted answer... So I am asking here. [ruby - Rails 3 model associations - Stack Overflow]

I am making a simple BBS system with ruby on rails3.

There are 3 main models, which are Members/Categories/Articles.

Article belongs to Members/Categories, (member_id/category_id columns in db table) and each member/category 'has_many' articles.

When a specific user tries to write an article, I tried it by

def new   @article = current_member.articles.new end

and that automatically filled in a member_id section when an article is created without any form input or anything. I used a session to create a current_member.

Now, what should I do if I want to automatically fill a category_id column of an article?? Is there something like

I believe every data related jobs should be done within model. However, I am passing in :category value through url

For example,

localhost:3000/articles/qna/new

would mean the article should have an category_id of 2 (assuming category with id=2 has name=qna, also, I did routing jobs that I can successfully get 'qna' from params[:category]).

Should I use

def create    current_member.articles.build(:category => get_category_id_from_name(params[:category])) end

? But is it okay? because I believe since models cannot access params variable, controller has to do the above job, and thats not 'rails way' I do not want to use nested form, because I do not want user to choose an category when they are writing. Its like, if there is a QnA board, and if user clicked 'write' button, that means user is writing in a QnA board.

I asked a question on stackoverflow.com but did not get a wanted answer... So I am asking here. [ruby - Rails 3 model associations - Stack Overflow]

I am making a simple BBS system with ruby on rails3.

There are 3 main models, which are Members/Categories/Articles.

Article belongs to Members/Categories, (member_id/category_id columns in db table) and each member/category 'has_many' articles.

When a specific user tries to write an article, I tried it by

def new @article = current_member.articles.new end

and that automatically filled in a member_id section when an article is created without any form input or anything. I used a session to create a current_member.

Now, what should I do if I want to automatically fill a category_id column of an article?? Is there something like

I believe every data related jobs should be done within model. However, I am passing in :category value through url

For example,

localhost:3000/articles/qna/new

would mean the article should have an category_id of 2 (assuming category with id=2 has name=qna, also, I did routing jobs that I can successfully get 'qna' from params[:category]).

Should I use

def create   current_member.articles.build(:category => get_category_id_from_name(params[:category])) end

? But is it okay?

Yes. This is perfectly normal. Generate a scaffold as a test and look at the code. It does exactly this.

because I believe since models cannot access params variable, controller has to do the above job, and thats not 'rails way'

Sure it is. Your controller is performing an action on the model. That's the controllers job... to pass data into the model so the model can pass it into the database (for example).

What you *don't* want in your controller is any raw sql. Or any other business logic that could be encapsulated within the model to be reused elsewhere.

-philip

Well, I assume, if I want to get a first article by a specific member, I believe

@article = current_member.articles.first

would work fine.

Then, what should I do if I want to get a first article which has a category_id of 2, in rails way??