hello, guys,
I read the docs for collection_select and by giving it
' {:include_blank => true}',
an empty value will be generated and placed before all other select
options.
Here's what I did only in my view:
--------------------------------- Start
------------------------------------
...
<p>
<%= f.label "category_id" %> <br />
<%= collection_select(:part,
'category_id',
@major_categories,
:id,
"name",
{:include_blank => true}
)
%>
</p>
<span id="subcategory_div">
<%= # @sub_categories
%>
</span>
<p>
<%= observe_field :part_category_id,
:url => { :action => :get_subcategories },
:update => :subcategory_div,
:with => "'category=' + value"
%>
</p>
...
--------------------------------- End
------------------------------------
I do have a problem now. For categories that do not have
subcategories, I don't want the select box to appear for sub
categories (because there's just a box with an empty element at the
moment).
Here is what I have in my controller:
--------------------------------- Start
------------------------------------
def get_subcategories
@category = Category.find(params[:category])
@sub_categories = @category.sub_categories.all
if @sub_categories == nil
puts "nothing"
else
puts "Sub CAT exusts"
require 'pp';
puts 'eeee'+ pp(@sub_categories) + '...'
end
for cat in @sub_categories
puts "subCat now is " + cat.name
end
respond_to do |format|
format.js {
# @sub_categories = @category.all
}
end
end
--------------------------------- End
------------------------------------
QUESTION: How do you test if a given collection of objects is defined
in Ruby?
==========================================================
In the case above in my controller method, it's @sub_categories - how
do I test that there are entries in it?
I have tried using 'nil' by means of "if @sub_categories.nil" and
"if @sub_categories == nil".
I have tried using 'defined?' by means of "if defined?
@sub_categories".
Both do not work.
In the world of perl (where I am from), I could test the variable for
truth (ie something like "if ( $sub_categories )" ).
Please help, guys!
On Oct 9, 3:29 am, Patrick Doyle <[email protected]> wrote:
> On Wed, Oct 7, 2009 at 5:29 PM, ct9a <[email protected]> wrote:
>
> > thank you. Just had a look at it.
>
> > Whenever you load data into objects in the controller (which gets
> > received by the view), how do you stop the first element from being
> > selected by default when you load the page?
>
> > In relation to the example
> > inhttp://pullmonkey.com/2008/3/30/dynamic-select-boxes-ruby-on-rails/,
> > assume @artists has the following values: "Jimi Hendrix", "Prince",
> > "Kenny Wayne Shepherd" and "Jonny Lang".
>
> > Now, when the index.html.erb page loads and builds the form, it's the
> > case that the first entry, "Jimi Hendrix" will be preselected.
> > How do you stop that? Would you add an "empty" /nil element? Sorry,
> > I'm from the Perl world and am getting myself into Rails so I might
> > not know the syntax of how to do certain things.
>
> > Thank you
>
> I do something like this in my controller:
>
> part_numbers = Part.all(:order => "number")
> @parts = [["None", nil]] + part_numbers.map {|p| p.number}
>
> and something like this in my view:
>
> <%= select_tag "clone_part",
> options_for_select(@parts, @clone_part),
> :onchange => "#{remote_function(:url => new_component_path,
> :with => "'clone_part='+$('clone_part').value")}"
> %>
>
> The first item in my list of part numbers is now "None". By giving it
> a value of nil, this parameter will not show up in my form if the user
> does not select a part. If the user does select a part, it gets
> passed to my controller as a parameter to the #new_component_path
> action.
>
> --wpd
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---