Passing Parameters

I've been away from rails for a while but now wanna get back into it and I guess my rails foo has got rusty. I've been wrestling with this simple! problem for the weekend and I can't fix it - driving me nuts. Real cry for help.

I have a Course model which contains price_per_week.

I'd like one page where a user selects a course and a duration and then submits this, the next page will look up the Course price and multiply by the duration and display a quote. EASY huh, not for me this weekend !

All I need for now to get back on track is just to get the basics, how do I pass the bl*^(*^dy Course through to the price screen.. Please see the code below. I'd be most grateful if someone can point me in the right direction..

I recognise that the I am not passing any params at the moment from this...

<%= link_to 'Get a Price!', :action => 'price', :id => @course %> <--- this is wrong ?

But how do I do it ?

I'll be happy just to get the Course name displayed for now, come back to the pricing later.

bb

You've already passed the first screen's state to the next screen. In the next screen, you simply needs to put hidden fields in the form in order to preserve the previous state, so that the POST handler will have all the data.

I don't get you. Any chance of an example?

I'm also not passing any params. ?

Hongli Lai wrote:

I don't get you. Any chance of an example?

I'm also not passing any params. ?

You're already passing the course (or at least its id). What more do you need ?

Fred

Frederick Cheung wrote: >> I don't get you. Any chance of an example?

>> I'm also not passing any params. ?

> You're already passing the course (or at least its id). What more do > you need ?

> Fred

That's not working.

Well what you should be doing in your price action

@selected_course = Course.find params[:id]

to turn that id back into an instance of course

Fred

You have: @selected_course = params[course][id]

Should be: @selected_course = params[:course][:id]

Otherwise you will be accessing the 'params' hash with the return value of the 'course' function as key, and you will be accessing the returned hash with the return value of the 'id' function as key.

Should be: @selected_course = params[:course][:id]

Sorry I pressed Send too quickly. I meant:

@selected_course = Course.find_by_id(params[:course][:id])

Hongli Lai wrote:

Should be: @selected_course = params[:course][:id

Sorry I pressed Send too quickly. I meant:

@selected_course = Course.find_by_id(params[:course][:id])

I am looking at the link_to "get a price"

I don't think it's actually passing the id of the course. You think that part (the linkto) is correct then?

bingo bob wrote:

Hongli Lai wrote:

Should be: @selected_course = params[:course][:id

Sorry I pressed Send too quickly. I meant:

@selected_course = Course.find_by_id(params[:course][:id])

I am looking at the link_to "get a price"

I don't think it's actually passing the id of the course. You think that part (the linkto) is correct then?

To be clear, this is the error I see when the button is clicked...

Processing InvoiceController#price (for 127.0.0.1 at 2008-08-24 12:34:02) [GET]   Session ID: BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo%0ASGFzaHsABjoKQHVzZWR7AA%3D%3D--09cd542da5f8d4e176562c6e4277422bc3d60982   Parameters: {"action"=>"price", "id"=>"course", "controller"=>"invoice"} Rendering template within layouts/welcome Rendering invoice/price

ActionView::TemplateError (You have a nil object when you didn't expect it! The error occurred while evaluating nil.name) on line #12 of invoice/price.html.erb: 9: 10: <br> 11: 12: <%= @selected_course.name %> 13:

bingo bob wrote:

Hongli Lai wrote:

Should be: @selected_course = params[:course][:id

Sorry I pressed Send too quickly. I meant:

@selected_course = Course.find_by_id(params[:course][:id])

I am looking at the link_to "get a price"

I don't think it's actually passing the id of the course. You think that part (the linkto) is correct then?

To be clear, this is the error I see when the button is clicked...

All of this was based on the assumption that @course was an instance
of course. Is it really ? What you are getting suggests it isn't ( if
so what is it)

Fred

Frederick Cheung wrote:

I am looking at the link_to "get a price"

I don't think it's actually passing the id of the course. You think that part (the linkto) is correct then?

To be clear, this is the error I see when the button is clicked...

All of this was based on the assumption that @course was an instance of course. Is it really ? What you are getting suggests it isn't ( if so what is it)

Fred

The lines of code below are meant to get me the params I need? Is the collection select maybe wrong? or the link_to, or maybe both?

either way I dont see the params being passed by the link_to.

<%= collection_select(:course, :id, @courses, :id, :name, options ={:prompt => "-Select a payment"}, :class =>"course") %>

<br>

<%= link_to 'Get a Price!', :action => 'price', :id => @course %>

Frederick Cheung wrote:

I am looking at the link_to "get a price"

I don't think it's actually passing the id of the course. You think that part (the linkto) is correct then?

To be clear, this is the error I see when the button is clicked...

All of this was based on the assumption that @course was an instance of course. Is it really ? What you are getting suggests it isn't ( if so what is it)

Fred

The lines of code below are meant to get me the params I need? Is the collection select maybe wrong? or the link_to, or maybe both?

What is wrong is that you expect a link to submit parameters from a
form element. That's not what links do. You need a form.

Fred

Like this?

<% form_tag :action => 'price' do %> <%= collection_select(:course, :id, @courses, :id, :name, options ={:prompt => "-Select a payment"}, :class =>"course") %> <%= submit_tag "Price" %> <% end %>