# Post variable repost itself

**URL:** <https://www.ruby-forum.com/t/post-variable-repost-itself/80467>\
**Category:** Rails\
**Created:** [December 27, 2006, 9:30am UTC](https://www.ruby-forum.com/t/post-variable-repost-itself/80467 "2006-12-27T09:30:24Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![clemrock](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c57346/32.png) [@clemrock](https://www.ruby-forum.com/u/clemrock)\
**Post date:** [December 27, 2006, 9:30am UTC](https://www.ruby-forum.com/t/post-variable-repost-itself/80467/1 "2006-12-27T09:30:24Z")

</div>

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:

```auto
  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:

```auto
  def test_find
    post :find, :context => 'admin'
    assert_response :success
  end
```

Thanks for any help!

---

<div class="post-metadata">

**Author:** ![clemrock](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c57346/32.png) [@clemrock](https://www.ruby-forum.com/u/clemrock)\
**Post date:** [December 27, 2006, 9:33am UTC](https://www.ruby-forum.com/t/post-variable-repost-itself/80467/2 "2006-12-27T09:33:59Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![clemrock](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c57346/32.png) [@clemrock](https://www.ruby-forum.com/u/clemrock)\
**Post date:** [December 27, 2006, 9:46am UTC](https://www.ruby-forum.com/t/post-variable-repost-itself/80467/3 "2006-12-27T09:46:47Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![clemrock](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c57346/32.png) [@clemrock](https://www.ruby-forum.com/u/clemrock)\
**Post date:** [December 28, 2006, 1:39am UTC](https://www.ruby-forum.com/t/post-variable-repost-itself/80467/4 "2006-12-28T01:39:53Z")

</div>

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](http://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.

---

<div class="post-metadata">

**Author:** ![clemrock](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c57346/32.png) [@clemrock](https://www.ruby-forum.com/u/clemrock)\
**Post date:** [December 28, 2006, 9:31am UTC](https://www.ruby-forum.com/t/post-variable-repost-itself/80467/5 "2006-12-28T09:31:18Z")

</div>

Ok - progress w/ the test - had to change this little section (  
assert\_response :redirect to assert\_response :redirect) and it works  
like a charm:

```auto
  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](http://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.
