#1
  1. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Mar 2003
    Posts
    174
    Rep Power
    12

    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:

    Code:
      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 
                    redirect_to :action => 'index'
             end
           end
         end
      end
    Here's the html code:
    <input id="space_title" name="space[title]" size="30" type="text" />

    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:

    Code:
      def test_find 
        post :find, :context => 'admin'
        assert_response :success
      end
    Thanks for any help!
    Last edited by CLEM_C_ROCK; December 27th, 2006 at 12:51 PM.
  2. #2
  3. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Mar 2003
    Posts
    174
    Rep Power
    12
    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:

    Code:
      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

    Originally Posted by CLEM_C_ROCK
    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:

    Code:
      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 
                    redirect_to :action => 'index'
             end
           end
         end
      end
    Here's the html code:
    <input id="space_title" name="space[title]" size="30" type="text" />

    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:

    Code:
      def test_find 
        post :find, :context => 'admin'
        assert_response :success
      end
    Thanks for any help!
  4. #3
  5. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Mar 2003
    Posts
    174
    Rep Power
    12
    Ok - progress w/ the test - had to change this little section ( assert_response :redirect to assert_response :redirect) and it works like a charm:

    Code:
      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!

IMN logo majestic logo threadwatch logo seochat tools logo