Proper syntax for text_field

Sorry for this basic noob question:

I have an “Item” class in my models which corresponds to a SQL table,
and a “Cart” class and a “CartItem” class which do not. The Item
class does not have an amount object, which is transitory, so I’ve put
this amount object in my CartItem class:

class CartItem

attr_reader :item, :amount

def initialize( item )
@item = item
end

def set_amount( amount )
This.amount = amount
end

end

I have a list of items in a viewer form, and I’d like to pass
associated amount to my CartItem when the user hits the “Add to Cart”
button. I’ve tried many variations of text_field and text_field_tag
in:

<% @items.each do |item| %>

<%= text_field( :amount , :action => ‘set_amount( :amount )’, :id =>
item )%>
<%= button_to “Add to Cart” , :action => ‘add_to_cart’, :id => item
%>

<% end %>

I know the text_field up there is severely mangled and won’t work–but
it’s an example of the 2000th try, the last several hundred out of
pure desperation. Can anyone help with the proper syntax for the
text_field in the .html.emb file?

The add_to_cart call with the button is working:

def add_to_cart
item = Item.find( params[ :id ] )
@cart = find_cart
@cart.add_item( item )
end

Many TIA,
Craig

Text fields don’t take actions, they’re just text fields with some
optional aesthetics. put :amount in there, and if item.amount exists,
it will be filled in.

Also, ruby doesn’t use This, it’s “self.”

There may be other problems in find_cart and add_item.

On Sun, Sep 13, 2009 at 12:30 PM, Dudebot [email protected] wrote:

attr_reader :item, :amount

           <%= button_to "Add to Cart" , :action => 'add_to_cart', :id

The add_to_cart call with the button is working:

def add_to_cart
item = Item.find( params[ :id ] )
@cart = find_cart
@cart.add_item( item )
end

Many TIA,
Craig

The text_field view helper generates an HTML input tag. Thus, there’s
no
attribute on the input tag called ‘action’ in the X/HTML spec.
Next, when to use text_field and text_field_tag?

text_field: if you’re creating or updating a model.
text_field_tag: if you’re NOT creating or updating a model.

Thus, I’m guessing that you’re simply updating a session variable when
you’re performing the

@cart.add_item( item )

If this is the case, then you should use text_field_tag within a
form_tag.
You can see
example usage of ‘form_tag’ and ‘text_field_tag’ here:

If you are in fact creating or updating a model, then you should use
test_field within a form_for.
You can see examples usage of ‘form_for’ and ‘text_field’ here:

Finally, I would recommend getting access to a copy of “Agile Web
Development with Rails 3rd ed”
and/or obtaining the really great screencasts on the subject, “Mastering
Rails Form”,

Good luck,

-Conrad

Thanks, Eric. What I’m struggling with is how to set a variable,
rather than get one. What would be the proper form for setting
SomeObject.amount?

Thanks for the correction on “This”. Old habits die hard :slight_smile:

On Sun, Sep 13, 2009 at 2:05 PM, Dudebot [email protected] wrote:

it will be filled in.

I have a list of items in a viewer form, and I’d like to pass
:id => item

def add_to_cart
item = Item.find( params[ :id ] )
@cart = find_cart
@cart.add_item( item )
end

Many TIA,
Craig

<%= text_field( :amount, :value => some_value, :id => item ) %>

-Conrad

2009/9/13 Dudebot [email protected]:

Thanks, Eric. Â What I’m struggling with is how to set a variable,
rather than get one. Â What would be the proper form for setting
SomeObject.amount?

I don’t understand the question here. Are you trying to set the
content of the text field when it is displayed or set a variable in
your controller? If the latter then the value the user enters gets
passed to the controller in the params hash.

Colin

Thanks, Conrad. I did the “depot” tutorial in the Agile Rails book
3rd ed, and the whole pod/screencast on learningrails.com. Both are
light on forms. I just downloaded the 3 Mastering Rails Form
screencasts, and am going through the first–it’s excellent. Just
knowing about debug params is worth its weight in gold :slight_smile: I’ll go
through the first one, try my code again, then if I’m still having
trouble, repost. Thanks, Colin & Eric for your patience with this
noob :slight_smile: