Scroll Down Menu Problem

Please I need a help from you guys:

I have 2 models & 2 controllers:

  1. app/controller/register_controller.rb & app/model/register.rb
  2. app/controller/city_controller.rb & app/model/city.rb

In db/migrate/002_creates_city.rb, I fill it :

class CreateCitys < ActiveRecord::Migration
def self.up
create_table :citys do |t|
t.column :citys, :string
end

say_with_time ‘Adding Foreign Keys’ do
execute ‘ALTER TABLE registers ADD CONSTRAINT fk_reg_citys
FOREIGN KEY ( city_name ) REFERENCES kotas( id ) ON DELETE CASCADE’
end

def self.down
drop_table :kotas
end
end


I put has_many :registers in app/models/citys.rb
And belongs_to :citys in app/models/registers.rb

Then in app/view/register/_form.rhtml, I write this

Tujuan

<%= select_tag(:city, “-Select a city” +
options_from_collection_for_select(@find_city, :city, :city)) %>


In app/controller/register_controller.rb i declare @find_city like this:

def new
@register = Register.new
@find_city = City.find(:all, :order=>“city”)
end

And no changes for other scripts in controller that is from scaffold
generator.


I run the script, in http://localhost:3000/register/new the city name
list is shown. But I after I submit, the next page show me this error:

NoMethodError in /register#create

Showing app/views/register/_form.rhtml where line #18 raised:

You have a nil object when you didn’t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.inject

Extracted source (around line #18):

15:
16:

Tujuan

17:
18: <%= select_tag(:city, “-Select a city” +
options_from_collection_for_select(@find_city, :city, :city)) %>
19:
20:


21:

Please help me what should i do so the selected city in scroll down menu
can be inserted to database register for column city_name.

Thank You

Sorry this the correction of MIGRATION SCRIPT:


In db/migrate/002_creates_city.rb, I fill it :

class CreateCitys < ActiveRecord::Migration
def self.up
create_table :citys do |t|
t.column :citys, :string
end

say_with_time ‘Adding Foreign Keys’ do
execute ‘ALTER TABLE registers ADD CONSTRAINT fk_reg_citys
FOREIGN KEY ( city_name ) REFERENCES citys( id ) ON DELETE CASCADE’
end

def self.down
drop_table :citys
end
end

And no changes for other scripts in controller that is from scaffold
generator.


I run the script, in http://localhost:3000/register/new the city name
list is shown. But I after I submit, the next page show me this error:

NoMethodError in /register#create

Sounds like your create action (which you haven’t shown) is rendering
the form partial again, and that you’re not setting @find_city in
that action.
Normally you would only do this if the validation failed. You’ll need
to set @find_city again (or better, put that code in its own method
you can call from both new & create_

Fred

Frederick C. wrote:

And no changes for other scripts in controller that is from scaffold
generator.


I run the script, in http://localhost:3000/register/new the city name
list is shown. But I after I submit, the next page show me this error:

NoMethodError in /register#create

Sounds like your create action (which you haven’t shown) is rendering
the form partial again, and that you’re not setting @find_city in
that action.
Normally you would only do this if the validation failed. You’ll need
to set @find_city again (or better, put that code in its own method
you can call from both new & create_

Fred


Thanks for the advice. It works. The problem now is the selected city in
scroll down cant be stored on database it always has no value. each time
i select city and press submit, the error always like this. in City
table only has ID and CITY for columns. Please need advice again.

1 error prohibited this register from being saved

There were problems with the following fields:

* City can't be blank

On 8 Oct 2007, at 02:26, Fransiscus X. wrote:

There were problems with the following fields:

* City can't be blank

We can’t guess what’s in your create action.

Fred

Sorry again, Here is the corrections of action Create script.

def create
@register = Register.new(params[:register])
@find_city = City.find(:all, :order=>“id”)
if @register.save
flash[:notice] = ‘Register was successfully created.’
redirect_to :action => ‘list’
else
render :action => ‘new’
end
end

Frederick C. wrote:

On 8 Oct 2007, at 02:26, Fransiscus X. wrote:

There were problems with the following fields:

* City can't be blank

We can’t guess what’s in your create action.

Fred


here is Create action script in controller register_controller.rb. Each
time i select city, the city always no value or can be selected. Please
help me. Thanks.

def create
@register = Register.new(params[:register])
@find_city = City.find(:all, :order=>“id”)
if @city.save
flash[:notice] = ‘Register was successfully created.’
redirect_to :action => ‘list’
else
render :action => ‘new’
end
end

Create Script is above and _form.rhtml script is :

City

<%= select_tag (:city, “-Select a city” +
options_from_collection_for_select(@find_city, “id”, “city”)) %>

Please let me know what should I do? so the selected city can be saved
without blank information. Thanks.

On 8 Oct 2007, at 02:46, Fransiscus X. wrote:

Sorry again, Here is the corrections of action Create script.

def create
@register = Register.new(params[:register])

<%= select_tag (:city, “-Select a city” +
options_from_collection_for_select(@find_city, “id”, “city”)) %>

Your parameters are in params, not params[:register]. Either change
the form so that they are in params[:register], or do Register.new
(params)

Fred

One Question again

How to make our selected city from scrolldown menu is consistent in Edit
Area. I mean automatic select city that we have selected and stored in
database before.

Thanks.

I made script _from.rhtml like this

<%= select_tag ‘register[city]’, “<option value=“0”>Select a
city” + options_from_collection_for_select(@find_city, “city”,
“city”)) %>

And it works well. Thank you for your helping. And we need to put


def Create
@find_city = City.find(:all, :order=>“id”)

def Update
@find_city = City.find(:all, :order=>“id”)

def Edit
@find_city = City.find(:all, :order=>“id”)

def New
@find_city = City.find(:all, :order=>“id”)

in models/register.rb , we need to put validation so that ‘Select a
City’ will not stored into database of register.

class Penerbangan < ActiveRecord::Base

belongs_to :citys

validates_presence_of :city_name

end

Thank you for your helping Bro. [Double Thumbs For You]

I got the answer from my trial and Error (^-^)

The answer is :

<%= select_tag ‘register[city]’, “<option
value=”#{@register.city}">#{@register.city}" +
options_from_collection_for_select(@find_city, “city”,
“city”)) %>

Funny Right, I ask and I answer self
(^-^)

This case is closed

I’ll be right back with new question.

Thanks to Fred

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs