Find conditions

This are my models:

class Werelddeel < ActiveRecord::Base
has_many :land, :foreign_key => “werelddeel_id”
set_table_name “werelddelen”
set_primary_key “werelddeel_id”
has_permalink :zoeknaam

def to_param
zoeknaam
end

end

class Land < ActiveRecord::Base
belongs_to :werelddeel, :foreign_key => “werelddeel_id”
set_table_name “landen”
set_primary_key “landcode”

has_permalink :land_zoeknaam

def to_param
land_zoeknaam
end
end

I want to find al the (land)countries belongs to the
(werelddeel)continent.

@landen = Land.find(:all, :conditions => { :werelddeel_id =>
‘#{werelddeel_id}’ })

This code does nothing…what i am doing wrong??

Grtz…

@landen = Land.find(:all, :conditions => { :werelddeel_id =>
‘#{werelddeel_id}’ })

‘#{werelddeel_id}’
must be:
“#{werelddeel_id}”
the #{} thingy works only in double quotes

in case of such errors have a look in log/development.log too see how
the generated sql looks like. it will contain something like “…WHERE
werelddeel_id = #{werelddeel_id}…”

by the way if you already have the continent, eg in @weerelddel you can
just write:
@weerelddel.land
or
@weerelddel.landen
(not sure how this works with your naming)

@landen = Land.find(:all, :conditions => { :werelddeel_id =>
‘#{werelddeel_id}’ })

This code does nothing…what i am doing wrong??

By does nothing I assume you mean that an empty array is returned. A
string literal with single quotes isn’t interpolated, so the query
actually says WHERE wereldeel_id = ‘#{werelddeel_id}’ (which obviously
matches nothing). You need double quotes for interpolation to happen,
although it’s not clear to me why you can’t just do :werelddeel_id =>
werelddeel_id or even easier:
Land.find_all_by_werelddeel_id(werelddeel_id)

Fred

Frederick C. wrote:

�@landen = Land.find(:all, :conditions => { :werelddeel_id �=>
‘#{werelddeel_id}’ })

This code does nothing…what i am doing wrong??

By does nothing I assume you mean that an empty array is returned. A
string literal with single quotes isn’t interpolated, so the query
actually says WHERE wereldeel_id = ‘#{werelddeel_id}’ (which obviously
matches nothing). You need double quotes for interpolation to happen,
although it’s not clear to me why you can’t just do :werelddeel_id =>
werelddeel_id or even easier:
Land.find_all_by_werelddeel_id(werelddeel_id)

Fred

I just tried

@landen = Land.find(:all, :conditions => { :werelddeel_id =>
“#{werelddeel_id}” })
@landen = Land.find_all_by_werelddeel_id(werelddeel_id)

i get the error message “undefined local variable or method
`werelddeel_id’”

if i do static search like this:

@landen = Land.find(:all, :conditions => { :werelddeel_id => 1 })

1 = Afrika

I works…so the relationship works well…(i guess)

But this is not what i want…

Grtz…

then you didn’t set werelddeel_id before using it.

if you expect it as param in an url link then it would be:

params[:werelddeel_id]

Thorsten M. wrote:

then you didn’t set werelddeel_id before using it.

if you expect it as param in an url link then it would be:

params[:werelddeel_id]

i tried this.

Werelddeel controller
def show
@werelddeel = Werelddeel.find(params[:werelddeel_id])
@landen = Land.find_all_by_werelddeel_id(werelddeel_id)
end

errormessage
Couldn’t find Werelddeel without an ID

Thorsten M. wrote:

Werelddeel controller
def show
@werelddeel = Werelddeel.find(params[:werelddeel_id])
@landen = Land.find_all_by_werelddeel_id(werelddeel_id)
end

errormessage
Couldn’t find Werelddeel without an ID

ok, the default parameter for the show action is named id.

def show
@werelddeel = Werelddeel.find(params[:id])
@landen = Land.find_all_by_werelddeel_id(@werelddeel.id)
end

should work then

but

def show
@werelddeel = Werelddeel.find(params[:id])
@landen = @werelddeel.landen # or .land, (?) with your naming
end

read the development.log
this shows you lots of details for all calls your app makes
especially which parameters are sent to it. clear the file in a
texteditor,
save the empty file, run your app and have a look at it. this will help
you a lot finding detail bugs like that.
or just have a look at the output of your server, that’s just the same
as in the logfile

you’ll get some output like:

Processing ProductsController#show (for 127.0.0.1 at 2008-05-08
17:45:21) [GET]
Parameters: {“action”=>“show”, “id”=>“670060391”,
“controller”=>“member/products”, “page”=>“1”}

(shortened)
you can see which controller/action was called, which method used
and most important get a list with the parameters

i get this from my logfile:

Processing WerelddeelController#show (for 92.64.217.3 at 2008-05-09
08:34:32) [GET]
Session ID:
BAh7ByIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo%0ASGFzaHsABjoKQHVzZWR7ADoMY3NyZl9pZCIlMzBkMGExNWFkYzgyMGU1NDgz%0AZWE5OGYwM2MyYjU5N2M%3D–0b8fff2e25fb9af485a51e8e99ab7347882152aa
Parameters: {“action”=>“show”, “id”=>“europa”,
“controller”=>“werelddeel”}

NameError (undefined local variable or method werelddeel_id' for #<WerelddeelController:0xb7735aac>): /app/controllers/werelddeel_controller.rb:13:inshow’

He guys…

It works…

@werelddeel = Werelddeel.find_by_zoeknaam(params[:id])
@landen = Land.find_all_by_werelddeel_id(@werelddeel.werelddeel_id)

Thanks to you all…for you’re support!!

Werelddeel controller
def show
@werelddeel = Werelddeel.find(params[:werelddeel_id])
@landen = Land.find_all_by_werelddeel_id(werelddeel_id)
end

errormessage
Couldn’t find Werelddeel without an ID

ok, the default parameter for the show action is named id.

def show
@werelddeel = Werelddeel.find(params[:id])
@landen = Land.find_all_by_werelddeel_id(@werelddeel.id)
end

should work then

but

def show
@werelddeel = Werelddeel.find(params[:id])
@landen = @werelddeel.landen # or .land, (?) with your naming
end

read the development.log
this shows you lots of details for all calls your app makes
especially which parameters are sent to it. clear the file in a
texteditor,
save the empty file, run your app and have a look at it. this will help
you a lot finding detail bugs like that.
or just have a look at the output of your server, that’s just the same
as in the logfile

you’ll get some output like:

Processing ProductsController#show (for 127.0.0.1 at 2008-05-08
17:45:21) [GET]
Parameters: {“action”=>“show”, “id”=>“670060391”,
“controller”=>“member/products”, “page”=>“1”}

(shortened)
you can see which controller/action was called, which method used
and most important get a list with the parameters