gpt4 book ai didi

ruby-on-rails - ruby on rails 搜索表单

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:18 24 4
gpt4 key购买 nike

我是 RoR 的新手,我已经设法制作了一个基本的搜索表单,但在尝试扩展搜索标签(名称)时不断出现错误。我有一个包含各种数据(位置、网站、电子邮件、电话)并想知道如何将这些添加到我当前的搜索代码中。

/models/ciir.rb

def self.search(search)
if search
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
else
find(:all)
end
end

static_pages_controller.rb

def home
@ciirs = Ciir.search(params[:search])
end

/home.html.erb

<%= form_tag ciirs_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag " Search Database Records ", :name => nil %>
</p>
<% end %>

单击提交按钮(无搜索词)时,网址为:

ciirs?utf8=✓&search=

但是当将名称条件修改为“网站”之类的内容时,url 会更改为

ciirs?utf8=✓&search=&commit=+Search+Database+Records+ –

最佳答案

既然你提到你是 RoR 的新手,我必须分享我学习 RoR 的方式,即一次阅读、使用和分析一个问题。我建议您一次一个地查看以下要点,并尝试了解 RoR 如何对待它们以及它们如何适合您的问题:

  1. form_tag 是如何工作的?

  2. text_field_tag 是如何工作的?

  3. 一旦你理解了form_tagtext_field_tagf.text_field的区别?

  4. params 对象是如何创建的,它使用表单控件的名称?

  5. 如何以及何时使用 GET 和/或 POST 表单方法?无意中,有哪些不同类型的方法以及何时使用它们?

  6. form_tag 中如何使用 URL 以及它们由哪些组件组成?

  7. 通过学习 ArrayHash 来了解一点 Ruby 语言的知识?事实上,尽可能多地学习 Ruby

回答你的问题,

/home.html.erb

<%= form_tag "/static_pages/home", :method => 'post' do %>
<p>
<%= text_field_tag "search[name]", params.has_key?("search") && params[:search].has_key?("name") ? params[:search][:name] : "" %>
<%= submit_tag " Search Database Records " %>
</p>
<% end %>

/models/ciir.rb

def self.search(search)
if search
find(:all, :conditions => ["name LIKE '%?%'", search[:name]])
else
find(:all)
end
end

所以我修改了你的表单,并告诉 RoR search params 包含 name 的数据。

params 是一个Hash(它是一个键值对),其键名为search,它进一步是一个 Hash,其键名为 name

模型代码遵循同样的原则。我们将 search 键的 Hash 传递给函数,并在其中使用名为 name 的键的值。

我还更新了 form_tag 中的 url,将其指向 Controller 的主页操作。假设您已将它添加到您的 routes.rb 文件中,它通常遵循模式 controller_name/action_name 或函数名称 action_name_controller_name_pathaction_name_controller_name_url。在您的根目录运行 rake routes 命令以列出应用程序中的所有路径。

另请注意,我使用了 POST 方法而不是原始的 GET。您可能希望在此处使用 GET,因此请将其改回。

我希望这能奏效。

关于ruby-on-rails - ruby on rails 搜索表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18177106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com