Hello,
I've encountered a strange problem w/ a find method in a big project
I’m working on. One thing I must admit is I’m pretty new to ruby and
coming from a PHP background.
Anyway here’s the find method:
def find
if params.has_key? :space #*new* if request.post? #*old*
unless params[:space][:title].empty?
@space_pages, @spaces = paginate :space, :per_page => 30,
:conditions => "title like '%#{params[:space][:title].gsub(/'+/,
"\\\\'") }%'", :order => 'title asc'
if @spaces.size == 0
flash[:notice] = 'Space not found'
else
flash[:notice] = 'Space
render :action => 'index'
end
end
end
end
Here’s the html code:
Now the strange this w/ this function is I can type say: “test” and no
record will be found and the text box will be empty. If I hit the
submit button again the params[:space][:title] variable will still hold
the value of ‘test’.
Why is the params[:space][:title] holding the value of the text input
box when there’s nothing in it?
Also on a final note - I’m also trying to write a test for this method.
This method reports no errors or failures but seems to not be the most
thorough test:
def test_find
post :find, :context => 'admin'
assert_response :success
end
Thanks for any help!
Clem R. wrote:
if @spaces.size == 0
flash[:notice] = 'Space not found'
else
flash[:notice] = 'Space
render :action => 'index'
end
use redirect_to instead of render.
Yeah - I just caught that too. I changed the render to redirect_to and
there was no change in this behavior.
One problem is that I just don’t know how ruby handles post and get
requests.
Thanks for your time.
'm not used to the language and people’s coding sty
Elad wrote:
Clem R. wrote:
if @spaces.size == 0
flash[:notice] = 'Space not found'
else
flash[:notice] = 'Space
render :action => 'index'
end
use redirect_to instead of render.
More on that test part:
so I have this record in my spaces.yml:
first_space:
id: 1
title: My first space
subdomain: first-space
domain: functionalalcoholism.org
home_page_id: 57
user_id: 1
owner_id: 1
created_at: 2005-05-21 00:00:00
updated_at: 2005-05-21 00:00:00
wikiwords_enabled: 1
country_code: US
timezone_identifier: US/Eastern
And here’s my test:
def test_find
post :find, :space => {:title => ‘My first space’}, :context =>
‘admin’
assert_response :success
assert_not_nil assigns(:spaces)
assert_not_nil assigns(:space_pages)
assert_equal 1, assigns(:spaces).size #1 because there’s only one
record
assert_nil flash[:error]
end
But I now get a “Expected response to be a <:success>, but was <302>”
Error
Clem R. wrote:
Yeah - I just caught that too. I changed the render to redirect_to and
there was no change in this behavior.
One problem is that I just don’t know how ruby handles post and get
requests.
Thanks for your time.
'm not used to the language and people’s coding sty
Elad wrote:
Clem R. wrote:
if @spaces.size == 0
flash[:notice] = 'Space not found'
else
flash[:notice] = 'Space
render :action => 'index'
end
use redirect_to instead of render.
Ok - progress w/ the test - had to change this little section (
assert_response :redirect to assert_response :redirect) and it works
like a charm:
def test_find
post :find, :space => {:title => 'My first space'}, :context =>
'admin'
assert_response :redirect
assert_not_nil assigns(:spaces)
assert_not_nil assigns(:space_pages)
assert_equal 1, assigns(:spaces).size
assert_nil flash[:error]
end
Now if I could only figure out that double post part I would be the
happiest of campers!
Clem R. wrote:
More on that test part:
so I have this record in my spaces.yml:
first_space:
id: 1
title: My first space
subdomain: first-space
domain: functionalalcoholism.org
home_page_id: 57
user_id: 1
owner_id: 1
created_at: 2005-05-21 00:00:00
updated_at: 2005-05-21 00:00:00
wikiwords_enabled: 1
country_code: US
timezone_identifier: US/Eastern
And here’s my test:
def test_find
post :find, :space => {:title => ‘My first space’}, :context =>
‘admin’
assert_response :success
assert_not_nil assigns(:spaces)
assert_not_nil assigns(:space_pages)
assert_equal 1, assigns(:spaces).size #1 because there’s only one
record
assert_nil flash[:error]
end
But I now get a “Expected response to be a <:success>, but was <302>”
Error
Clem R. wrote:
Yeah - I just caught that too. I changed the render to redirect_to and
there was no change in this behavior.
One problem is that I just don’t know how ruby handles post and get
requests.
Thanks for your time.
'm not used to the language and people’s coding sty
Elad wrote:
Clem R. wrote:
if @spaces.size == 0
flash[:notice] = 'Space not found'
else
flash[:notice] = 'Space
render :action => 'index'
end
use redirect_to instead of render.