How can I send a search query(URL params) using text_field in Rails 5?

Multi tool use
Multi tool use











up vote
1
down vote

favorite












In Task controller (action index) I have this line:



@tasks = Task.where("title LIKE '%#{params[:q]}%'")


In view I have form_tag like this:



= form_tag tasks_path(format: :js), method: :get do |f|
= text_field_tag :q, params[:q]
= submit_tag :Search


And it is works fine, output in terminal:



Started GET "/tasks.js?utf8=%E2%9C%93&q=example&commit=Search" for 127.0.0.1 at 2018-11-08 10:28:37 +0200
Processing by TasksController#index as JS
Parameters: {"utf8"=>"✓", "q"=>"example", "commit"=>"Search"}
Rendering welcome/index.html.haml
Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%example%')


But I need to use form_for not form_tag.
My form_for form:



= form_for tasks_path, method: :get, remote: true do |f|
= f.text_field :q, value: params[:q]
= f.submit :Search


Terminal output:



Started GET "/index?utf8=%E2%9C%93&%2Ftasks%5Bq%5D=fdvdfvdfv&commit=Search" for 127.0.0.1 at 2018-11-08 10:30:11 +0200
Processing by WelcomeController#index as JS
Parameters: {"utf8"=>"✓", "/tasks"=>{"q"=>"fdvdfvdfv"}, "commit"=>"Search"}
Rendering welcome/index.html.haml within layouts/application
Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%%')


And it is don't work, empty between '%%'.
Maybe you can help me.










share|improve this question







New contributor




wannabeaprogrammer is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
























    up vote
    1
    down vote

    favorite












    In Task controller (action index) I have this line:



    @tasks = Task.where("title LIKE '%#{params[:q]}%'")


    In view I have form_tag like this:



    = form_tag tasks_path(format: :js), method: :get do |f|
    = text_field_tag :q, params[:q]
    = submit_tag :Search


    And it is works fine, output in terminal:



    Started GET "/tasks.js?utf8=%E2%9C%93&q=example&commit=Search" for 127.0.0.1 at 2018-11-08 10:28:37 +0200
    Processing by TasksController#index as JS
    Parameters: {"utf8"=>"✓", "q"=>"example", "commit"=>"Search"}
    Rendering welcome/index.html.haml
    Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%example%')


    But I need to use form_for not form_tag.
    My form_for form:



    = form_for tasks_path, method: :get, remote: true do |f|
    = f.text_field :q, value: params[:q]
    = f.submit :Search


    Terminal output:



    Started GET "/index?utf8=%E2%9C%93&%2Ftasks%5Bq%5D=fdvdfvdfv&commit=Search" for 127.0.0.1 at 2018-11-08 10:30:11 +0200
    Processing by WelcomeController#index as JS
    Parameters: {"utf8"=>"✓", "/tasks"=>{"q"=>"fdvdfvdfv"}, "commit"=>"Search"}
    Rendering welcome/index.html.haml within layouts/application
    Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%%')


    And it is don't work, empty between '%%'.
    Maybe you can help me.










    share|improve this question







    New contributor




    wannabeaprogrammer is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.






















      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      In Task controller (action index) I have this line:



      @tasks = Task.where("title LIKE '%#{params[:q]}%'")


      In view I have form_tag like this:



      = form_tag tasks_path(format: :js), method: :get do |f|
      = text_field_tag :q, params[:q]
      = submit_tag :Search


      And it is works fine, output in terminal:



      Started GET "/tasks.js?utf8=%E2%9C%93&q=example&commit=Search" for 127.0.0.1 at 2018-11-08 10:28:37 +0200
      Processing by TasksController#index as JS
      Parameters: {"utf8"=>"✓", "q"=>"example", "commit"=>"Search"}
      Rendering welcome/index.html.haml
      Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%example%')


      But I need to use form_for not form_tag.
      My form_for form:



      = form_for tasks_path, method: :get, remote: true do |f|
      = f.text_field :q, value: params[:q]
      = f.submit :Search


      Terminal output:



      Started GET "/index?utf8=%E2%9C%93&%2Ftasks%5Bq%5D=fdvdfvdfv&commit=Search" for 127.0.0.1 at 2018-11-08 10:30:11 +0200
      Processing by WelcomeController#index as JS
      Parameters: {"utf8"=>"✓", "/tasks"=>{"q"=>"fdvdfvdfv"}, "commit"=>"Search"}
      Rendering welcome/index.html.haml within layouts/application
      Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%%')


      And it is don't work, empty between '%%'.
      Maybe you can help me.










      share|improve this question







      New contributor




      wannabeaprogrammer is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      In Task controller (action index) I have this line:



      @tasks = Task.where("title LIKE '%#{params[:q]}%'")


      In view I have form_tag like this:



      = form_tag tasks_path(format: :js), method: :get do |f|
      = text_field_tag :q, params[:q]
      = submit_tag :Search


      And it is works fine, output in terminal:



      Started GET "/tasks.js?utf8=%E2%9C%93&q=example&commit=Search" for 127.0.0.1 at 2018-11-08 10:28:37 +0200
      Processing by TasksController#index as JS
      Parameters: {"utf8"=>"✓", "q"=>"example", "commit"=>"Search"}
      Rendering welcome/index.html.haml
      Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%example%')


      But I need to use form_for not form_tag.
      My form_for form:



      = form_for tasks_path, method: :get, remote: true do |f|
      = f.text_field :q, value: params[:q]
      = f.submit :Search


      Terminal output:



      Started GET "/index?utf8=%E2%9C%93&%2Ftasks%5Bq%5D=fdvdfvdfv&commit=Search" for 127.0.0.1 at 2018-11-08 10:30:11 +0200
      Processing by WelcomeController#index as JS
      Parameters: {"utf8"=>"✓", "/tasks"=>{"q"=>"fdvdfvdfv"}, "commit"=>"Search"}
      Rendering welcome/index.html.haml within layouts/application
      Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%%')


      And it is don't work, empty between '%%'.
      Maybe you can help me.







      ruby-on-rails ruby-on-rails-4 ruby-on-rails-5






      share|improve this question







      New contributor




      wannabeaprogrammer is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question







      New contributor




      wannabeaprogrammer is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question






      New contributor




      wannabeaprogrammer is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked yesterday









      wannabeaprogrammer

      61




      61




      New contributor




      wannabeaprogrammer is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      wannabeaprogrammer is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      wannabeaprogrammer is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.
























          2 Answers
          2






          active

          oldest

          votes

















          up vote
          1
          down vote













          You should use form_tag not form_for. form_for is used to create a form for a model object, which isn't your case.



          And to answer your question, when you look at the generated params in the log, you have "/tasks"=>{"q"=>"fdvdfvdfv"}. so params[:q] won't work in this case.



          My final answer, go with form_tag.






          share|improve this answer





















          • But form_tag don`t work with option "remote: true". And I need a remote form (not refreshing the page)
            – wannabeaprogrammer
            yesterday










          • @wannabeaprogrammer It does work with remote: true. See the docs apidock.com/rails/ActionView/Helpers/FormTagHelper/form_tag
            – Pavan
            yesterday












          • Just to add to this answer, you should look at using placeholders instead of interpolating params[:q] directly into your query - this will speed up your query and also safeguard it from SQL Injection. Section 2.2.1 in this guide will help -> guides.rubyonrails.org/active_record_querying.html
            – ThorTL67
            yesterday


















          up vote
          0
          down vote













          In Rails 5.1+ you should use form_with which replaces both form_for and form_tag.



          Without a model



          = form_with(url: tasks_path(format: :js), method: :get) do |f|
          = f.text_field :q, params[:q]
          = f.submit_tag :Search


          Make sure you parameterize the SQL query to avoid a SQL injection vulnerability:



          @tasks = Task.where("title LIKE ?", "%#{params[:q]}%")


          Virtual model



          Or you can create a virtual model, which is a model without a database table:



          # app/models/seach_query.rb
          class SearchQuery
          include ActiveModel::Model
          attr_accessor :q
          end




          = form_with(model: (@search_query || SearchQuery.new) url: tasks_path(format: :js), method: :get) do |f|
          = f.text_field :q
          = f.submit :Search




          class TasksController < ApplicationController
          # ...
          def index
          @tasks = Task.all
          if params[:search_query]
          @search_query = SearchQuery.new(params.fetch(:search_query).permit(:q))
          @tasks = @tasks.where('tasks.title LIKE ?', "%#{ @search_query.q }%")
          end
          end
          end


          The advantage of a virtual model is that you can use validations, localize fields with the I18n module etc and organize your code.






          share|improve this answer





















          • Ok, thanks. I wrote this code: = form_with(url: tasks_path(format: :js), method: :get, remote: true) do |f| = f.text_field :q, value: params[:q] = f.submit :Search - @tasks.each do |f| %li = f.title
            – wannabeaprogrammer
            yesterday










          • It sends a params but search doesn't work.
            – wannabeaprogrammer
            yesterday










          • Terminal ouput: Started GET "/tasks.js?utf8=%E2%9C%93&q=lalala&commit=Search" for 127.0.0.1 at 2018-11-08 17:55:04 +0200 Processing by TasksController#index as JS Parameters: {"utf8"=>"✓", "q"=>"lalala", "commit"=>"Search"} Rendering welcome/index.html.haml Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%lalala%') ↳ app/views/welcome/index.html.haml:33 Rendered welcome/index.html.haml (20.2ms) Completed 200 OK in 26ms (Views: 24.2ms | ActiveRecord: 0.4ms)
            – wannabeaprogrammer
            yesterday










          • "Does't work" is the most useless information in the world.
            – max
            yesterday










          • I don't see any changes on view.
            – wannabeaprogrammer
            yesterday











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });






          wannabeaprogrammer is a new contributor. Be nice, and check out our Code of Conduct.










           

          draft saved


          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53204030%2fhow-can-i-send-a-search-queryurl-params-using-text-field-in-rails-5%23new-answer', 'question_page');
          }
          );

          Post as a guest
































          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          1
          down vote













          You should use form_tag not form_for. form_for is used to create a form for a model object, which isn't your case.



          And to answer your question, when you look at the generated params in the log, you have "/tasks"=>{"q"=>"fdvdfvdfv"}. so params[:q] won't work in this case.



          My final answer, go with form_tag.






          share|improve this answer





















          • But form_tag don`t work with option "remote: true". And I need a remote form (not refreshing the page)
            – wannabeaprogrammer
            yesterday










          • @wannabeaprogrammer It does work with remote: true. See the docs apidock.com/rails/ActionView/Helpers/FormTagHelper/form_tag
            – Pavan
            yesterday












          • Just to add to this answer, you should look at using placeholders instead of interpolating params[:q] directly into your query - this will speed up your query and also safeguard it from SQL Injection. Section 2.2.1 in this guide will help -> guides.rubyonrails.org/active_record_querying.html
            – ThorTL67
            yesterday















          up vote
          1
          down vote













          You should use form_tag not form_for. form_for is used to create a form for a model object, which isn't your case.



          And to answer your question, when you look at the generated params in the log, you have "/tasks"=>{"q"=>"fdvdfvdfv"}. so params[:q] won't work in this case.



          My final answer, go with form_tag.






          share|improve this answer





















          • But form_tag don`t work with option "remote: true". And I need a remote form (not refreshing the page)
            – wannabeaprogrammer
            yesterday










          • @wannabeaprogrammer It does work with remote: true. See the docs apidock.com/rails/ActionView/Helpers/FormTagHelper/form_tag
            – Pavan
            yesterday












          • Just to add to this answer, you should look at using placeholders instead of interpolating params[:q] directly into your query - this will speed up your query and also safeguard it from SQL Injection. Section 2.2.1 in this guide will help -> guides.rubyonrails.org/active_record_querying.html
            – ThorTL67
            yesterday













          up vote
          1
          down vote










          up vote
          1
          down vote









          You should use form_tag not form_for. form_for is used to create a form for a model object, which isn't your case.



          And to answer your question, when you look at the generated params in the log, you have "/tasks"=>{"q"=>"fdvdfvdfv"}. so params[:q] won't work in this case.



          My final answer, go with form_tag.






          share|improve this answer












          You should use form_tag not form_for. form_for is used to create a form for a model object, which isn't your case.



          And to answer your question, when you look at the generated params in the log, you have "/tasks"=>{"q"=>"fdvdfvdfv"}. so params[:q] won't work in this case.



          My final answer, go with form_tag.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered yesterday









          Pavan

          29.4k62951




          29.4k62951












          • But form_tag don`t work with option "remote: true". And I need a remote form (not refreshing the page)
            – wannabeaprogrammer
            yesterday










          • @wannabeaprogrammer It does work with remote: true. See the docs apidock.com/rails/ActionView/Helpers/FormTagHelper/form_tag
            – Pavan
            yesterday












          • Just to add to this answer, you should look at using placeholders instead of interpolating params[:q] directly into your query - this will speed up your query and also safeguard it from SQL Injection. Section 2.2.1 in this guide will help -> guides.rubyonrails.org/active_record_querying.html
            – ThorTL67
            yesterday


















          • But form_tag don`t work with option "remote: true". And I need a remote form (not refreshing the page)
            – wannabeaprogrammer
            yesterday










          • @wannabeaprogrammer It does work with remote: true. See the docs apidock.com/rails/ActionView/Helpers/FormTagHelper/form_tag
            – Pavan
            yesterday












          • Just to add to this answer, you should look at using placeholders instead of interpolating params[:q] directly into your query - this will speed up your query and also safeguard it from SQL Injection. Section 2.2.1 in this guide will help -> guides.rubyonrails.org/active_record_querying.html
            – ThorTL67
            yesterday
















          But form_tag don`t work with option "remote: true". And I need a remote form (not refreshing the page)
          – wannabeaprogrammer
          yesterday




          But form_tag don`t work with option "remote: true". And I need a remote form (not refreshing the page)
          – wannabeaprogrammer
          yesterday












          @wannabeaprogrammer It does work with remote: true. See the docs apidock.com/rails/ActionView/Helpers/FormTagHelper/form_tag
          – Pavan
          yesterday






          @wannabeaprogrammer It does work with remote: true. See the docs apidock.com/rails/ActionView/Helpers/FormTagHelper/form_tag
          – Pavan
          yesterday














          Just to add to this answer, you should look at using placeholders instead of interpolating params[:q] directly into your query - this will speed up your query and also safeguard it from SQL Injection. Section 2.2.1 in this guide will help -> guides.rubyonrails.org/active_record_querying.html
          – ThorTL67
          yesterday




          Just to add to this answer, you should look at using placeholders instead of interpolating params[:q] directly into your query - this will speed up your query and also safeguard it from SQL Injection. Section 2.2.1 in this guide will help -> guides.rubyonrails.org/active_record_querying.html
          – ThorTL67
          yesterday












          up vote
          0
          down vote













          In Rails 5.1+ you should use form_with which replaces both form_for and form_tag.



          Without a model



          = form_with(url: tasks_path(format: :js), method: :get) do |f|
          = f.text_field :q, params[:q]
          = f.submit_tag :Search


          Make sure you parameterize the SQL query to avoid a SQL injection vulnerability:



          @tasks = Task.where("title LIKE ?", "%#{params[:q]}%")


          Virtual model



          Or you can create a virtual model, which is a model without a database table:



          # app/models/seach_query.rb
          class SearchQuery
          include ActiveModel::Model
          attr_accessor :q
          end




          = form_with(model: (@search_query || SearchQuery.new) url: tasks_path(format: :js), method: :get) do |f|
          = f.text_field :q
          = f.submit :Search




          class TasksController < ApplicationController
          # ...
          def index
          @tasks = Task.all
          if params[:search_query]
          @search_query = SearchQuery.new(params.fetch(:search_query).permit(:q))
          @tasks = @tasks.where('tasks.title LIKE ?', "%#{ @search_query.q }%")
          end
          end
          end


          The advantage of a virtual model is that you can use validations, localize fields with the I18n module etc and organize your code.






          share|improve this answer





















          • Ok, thanks. I wrote this code: = form_with(url: tasks_path(format: :js), method: :get, remote: true) do |f| = f.text_field :q, value: params[:q] = f.submit :Search - @tasks.each do |f| %li = f.title
            – wannabeaprogrammer
            yesterday










          • It sends a params but search doesn't work.
            – wannabeaprogrammer
            yesterday










          • Terminal ouput: Started GET "/tasks.js?utf8=%E2%9C%93&q=lalala&commit=Search" for 127.0.0.1 at 2018-11-08 17:55:04 +0200 Processing by TasksController#index as JS Parameters: {"utf8"=>"✓", "q"=>"lalala", "commit"=>"Search"} Rendering welcome/index.html.haml Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%lalala%') ↳ app/views/welcome/index.html.haml:33 Rendered welcome/index.html.haml (20.2ms) Completed 200 OK in 26ms (Views: 24.2ms | ActiveRecord: 0.4ms)
            – wannabeaprogrammer
            yesterday










          • "Does't work" is the most useless information in the world.
            – max
            yesterday










          • I don't see any changes on view.
            – wannabeaprogrammer
            yesterday















          up vote
          0
          down vote













          In Rails 5.1+ you should use form_with which replaces both form_for and form_tag.



          Without a model



          = form_with(url: tasks_path(format: :js), method: :get) do |f|
          = f.text_field :q, params[:q]
          = f.submit_tag :Search


          Make sure you parameterize the SQL query to avoid a SQL injection vulnerability:



          @tasks = Task.where("title LIKE ?", "%#{params[:q]}%")


          Virtual model



          Or you can create a virtual model, which is a model without a database table:



          # app/models/seach_query.rb
          class SearchQuery
          include ActiveModel::Model
          attr_accessor :q
          end




          = form_with(model: (@search_query || SearchQuery.new) url: tasks_path(format: :js), method: :get) do |f|
          = f.text_field :q
          = f.submit :Search




          class TasksController < ApplicationController
          # ...
          def index
          @tasks = Task.all
          if params[:search_query]
          @search_query = SearchQuery.new(params.fetch(:search_query).permit(:q))
          @tasks = @tasks.where('tasks.title LIKE ?', "%#{ @search_query.q }%")
          end
          end
          end


          The advantage of a virtual model is that you can use validations, localize fields with the I18n module etc and organize your code.






          share|improve this answer





















          • Ok, thanks. I wrote this code: = form_with(url: tasks_path(format: :js), method: :get, remote: true) do |f| = f.text_field :q, value: params[:q] = f.submit :Search - @tasks.each do |f| %li = f.title
            – wannabeaprogrammer
            yesterday










          • It sends a params but search doesn't work.
            – wannabeaprogrammer
            yesterday










          • Terminal ouput: Started GET "/tasks.js?utf8=%E2%9C%93&q=lalala&commit=Search" for 127.0.0.1 at 2018-11-08 17:55:04 +0200 Processing by TasksController#index as JS Parameters: {"utf8"=>"✓", "q"=>"lalala", "commit"=>"Search"} Rendering welcome/index.html.haml Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%lalala%') ↳ app/views/welcome/index.html.haml:33 Rendered welcome/index.html.haml (20.2ms) Completed 200 OK in 26ms (Views: 24.2ms | ActiveRecord: 0.4ms)
            – wannabeaprogrammer
            yesterday










          • "Does't work" is the most useless information in the world.
            – max
            yesterday










          • I don't see any changes on view.
            – wannabeaprogrammer
            yesterday













          up vote
          0
          down vote










          up vote
          0
          down vote









          In Rails 5.1+ you should use form_with which replaces both form_for and form_tag.



          Without a model



          = form_with(url: tasks_path(format: :js), method: :get) do |f|
          = f.text_field :q, params[:q]
          = f.submit_tag :Search


          Make sure you parameterize the SQL query to avoid a SQL injection vulnerability:



          @tasks = Task.where("title LIKE ?", "%#{params[:q]}%")


          Virtual model



          Or you can create a virtual model, which is a model without a database table:



          # app/models/seach_query.rb
          class SearchQuery
          include ActiveModel::Model
          attr_accessor :q
          end




          = form_with(model: (@search_query || SearchQuery.new) url: tasks_path(format: :js), method: :get) do |f|
          = f.text_field :q
          = f.submit :Search




          class TasksController < ApplicationController
          # ...
          def index
          @tasks = Task.all
          if params[:search_query]
          @search_query = SearchQuery.new(params.fetch(:search_query).permit(:q))
          @tasks = @tasks.where('tasks.title LIKE ?', "%#{ @search_query.q }%")
          end
          end
          end


          The advantage of a virtual model is that you can use validations, localize fields with the I18n module etc and organize your code.






          share|improve this answer












          In Rails 5.1+ you should use form_with which replaces both form_for and form_tag.



          Without a model



          = form_with(url: tasks_path(format: :js), method: :get) do |f|
          = f.text_field :q, params[:q]
          = f.submit_tag :Search


          Make sure you parameterize the SQL query to avoid a SQL injection vulnerability:



          @tasks = Task.where("title LIKE ?", "%#{params[:q]}%")


          Virtual model



          Or you can create a virtual model, which is a model without a database table:



          # app/models/seach_query.rb
          class SearchQuery
          include ActiveModel::Model
          attr_accessor :q
          end




          = form_with(model: (@search_query || SearchQuery.new) url: tasks_path(format: :js), method: :get) do |f|
          = f.text_field :q
          = f.submit :Search




          class TasksController < ApplicationController
          # ...
          def index
          @tasks = Task.all
          if params[:search_query]
          @search_query = SearchQuery.new(params.fetch(:search_query).permit(:q))
          @tasks = @tasks.where('tasks.title LIKE ?', "%#{ @search_query.q }%")
          end
          end
          end


          The advantage of a virtual model is that you can use validations, localize fields with the I18n module etc and organize your code.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered yesterday









          max

          43.4k856103




          43.4k856103












          • Ok, thanks. I wrote this code: = form_with(url: tasks_path(format: :js), method: :get, remote: true) do |f| = f.text_field :q, value: params[:q] = f.submit :Search - @tasks.each do |f| %li = f.title
            – wannabeaprogrammer
            yesterday










          • It sends a params but search doesn't work.
            – wannabeaprogrammer
            yesterday










          • Terminal ouput: Started GET "/tasks.js?utf8=%E2%9C%93&q=lalala&commit=Search" for 127.0.0.1 at 2018-11-08 17:55:04 +0200 Processing by TasksController#index as JS Parameters: {"utf8"=>"✓", "q"=>"lalala", "commit"=>"Search"} Rendering welcome/index.html.haml Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%lalala%') ↳ app/views/welcome/index.html.haml:33 Rendered welcome/index.html.haml (20.2ms) Completed 200 OK in 26ms (Views: 24.2ms | ActiveRecord: 0.4ms)
            – wannabeaprogrammer
            yesterday










          • "Does't work" is the most useless information in the world.
            – max
            yesterday










          • I don't see any changes on view.
            – wannabeaprogrammer
            yesterday


















          • Ok, thanks. I wrote this code: = form_with(url: tasks_path(format: :js), method: :get, remote: true) do |f| = f.text_field :q, value: params[:q] = f.submit :Search - @tasks.each do |f| %li = f.title
            – wannabeaprogrammer
            yesterday










          • It sends a params but search doesn't work.
            – wannabeaprogrammer
            yesterday










          • Terminal ouput: Started GET "/tasks.js?utf8=%E2%9C%93&q=lalala&commit=Search" for 127.0.0.1 at 2018-11-08 17:55:04 +0200 Processing by TasksController#index as JS Parameters: {"utf8"=>"✓", "q"=>"lalala", "commit"=>"Search"} Rendering welcome/index.html.haml Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%lalala%') ↳ app/views/welcome/index.html.haml:33 Rendered welcome/index.html.haml (20.2ms) Completed 200 OK in 26ms (Views: 24.2ms | ActiveRecord: 0.4ms)
            – wannabeaprogrammer
            yesterday










          • "Does't work" is the most useless information in the world.
            – max
            yesterday










          • I don't see any changes on view.
            – wannabeaprogrammer
            yesterday
















          Ok, thanks. I wrote this code: = form_with(url: tasks_path(format: :js), method: :get, remote: true) do |f| = f.text_field :q, value: params[:q] = f.submit :Search - @tasks.each do |f| %li = f.title
          – wannabeaprogrammer
          yesterday




          Ok, thanks. I wrote this code: = form_with(url: tasks_path(format: :js), method: :get, remote: true) do |f| = f.text_field :q, value: params[:q] = f.submit :Search - @tasks.each do |f| %li = f.title
          – wannabeaprogrammer
          yesterday












          It sends a params but search doesn't work.
          – wannabeaprogrammer
          yesterday




          It sends a params but search doesn't work.
          – wannabeaprogrammer
          yesterday












          Terminal ouput: Started GET "/tasks.js?utf8=%E2%9C%93&q=lalala&commit=Search" for 127.0.0.1 at 2018-11-08 17:55:04 +0200 Processing by TasksController#index as JS Parameters: {"utf8"=>"✓", "q"=>"lalala", "commit"=>"Search"} Rendering welcome/index.html.haml Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%lalala%') ↳ app/views/welcome/index.html.haml:33 Rendered welcome/index.html.haml (20.2ms) Completed 200 OK in 26ms (Views: 24.2ms | ActiveRecord: 0.4ms)
          – wannabeaprogrammer
          yesterday




          Terminal ouput: Started GET "/tasks.js?utf8=%E2%9C%93&q=lalala&commit=Search" for 127.0.0.1 at 2018-11-08 17:55:04 +0200 Processing by TasksController#index as JS Parameters: {"utf8"=>"✓", "q"=>"lalala", "commit"=>"Search"} Rendering welcome/index.html.haml Task Load (0.4ms) SELECT "tasks".* FROM "tasks" WHERE (title LIKE '%lalala%') ↳ app/views/welcome/index.html.haml:33 Rendered welcome/index.html.haml (20.2ms) Completed 200 OK in 26ms (Views: 24.2ms | ActiveRecord: 0.4ms)
          – wannabeaprogrammer
          yesterday












          "Does't work" is the most useless information in the world.
          – max
          yesterday




          "Does't work" is the most useless information in the world.
          – max
          yesterday












          I don't see any changes on view.
          – wannabeaprogrammer
          yesterday




          I don't see any changes on view.
          – wannabeaprogrammer
          yesterday










          wannabeaprogrammer is a new contributor. Be nice, and check out our Code of Conduct.










           

          draft saved


          draft discarded


















          wannabeaprogrammer is a new contributor. Be nice, and check out our Code of Conduct.













          wannabeaprogrammer is a new contributor. Be nice, and check out our Code of Conduct.












          wannabeaprogrammer is a new contributor. Be nice, and check out our Code of Conduct.















           


          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53204030%2fhow-can-i-send-a-search-queryurl-params-using-text-field-in-rails-5%23new-answer', 'question_page');
          }
          );

          Post as a guest




















































































          fzR0kplkxuaKyw7U6d Uo2e
          kG8OUUs2LKMKWJZ5,xo,ChjXVzDnj1BSY3 jELv z8ioN 4jqzcqOBd3F UJIrmxcW R24WXBiup0nVb3zwMxh4VTHsJ yeDKSXM4,iM6Pc

          Popular posts from this blog

          How to pass form data using jquery Ajax to insert data in database?

          Guess what letter conforming each word

          Run scheduled task as local user group (not BUILTIN)