Post variable repost itself

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.