Jon*_*han 1 ruby ruby-on-rails
我是RoR的新手,我设法制作了一个基本的搜索表单,但在尝试扩展搜索标签(名称)时不断出现错误.我有一个包含各种数据的模型(位置,网站,电子邮件,电话)和我想知道如何将这些添加到我当前的搜索代码中.
/models/ciir.rb
def self.search(search)
if search
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
else
find(:all)
end
end
Run Code Online (Sandbox Code Playgroud)
static_pages_controller.rb
def home
@ciirs = Ciir.search(params[:search])
end
Run Code Online (Sandbox Code Playgroud)
/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 %>
Run Code Online (Sandbox Code Playgroud)
点击提交按钮(没有搜索字词)时,网址为:
ciirs?utf8=?&search=
Run Code Online (Sandbox Code Playgroud)
但是当将名称条件修改为类似"网站"的内容时,网址会更改为
ciirs?utf8=?&search=&commit=+Search+Database+Records+ –
Run Code Online (Sandbox Code Playgroud)
既然你提到你是RoR的新手,我必须分享我学习RoR一次阅读,使用和分析一个问题的方式.我建议你一次看一下以下几点,并尝试了解RoR如何对待它们以及它们如何适合你的问题:
怎么样form_tag?
怎么样text_field_tag?
一旦你理解了form_tag,text_field_tag和之间的区别f.text_field?
如何params创建对象,它使用表单控件的名称?
如何以及何时使用GET和/或POST形成方法?不经意间,有哪些不同类型的方法以及何时使用它们?
如何URL使用form_tag它们和它们由哪些组成?
Ruby通过学习Arrays和Hashes 来学习一些语言知识?事实上,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 %>
Run Code Online (Sandbox Code Playgroud)
/models/ciir.rb
def self.search(search)
if search
find(:all, :conditions => ["name LIKE '%?%'", search[:name]])
else
find(:all)
end
end
Run Code Online (Sandbox Code Playgroud)
所以我修改了你的表单,并告诉RoR search params包含数据name.
params是一个Hash(它是a key-value pair)具有键名称search,其进一步是Hash具有名称的键name.
模型代码遵循相同的原则.我们将Hashkey 传递search给函数,并在那里使用了key的值name.
我还更新了网址form_tag,将其指向控制器的主页操作.假设您已将其添加到routes.rb文件中,它通常遵循模式controller_name/action_name或函数名称action_name_controller_name_path或action_name_controller_name_url.rake routes在根目录下运行命令以列出应用程序中的所有路径.
另请注意,我使用的是POST方法而不是原始方法GET.您可能希望在GET此处使用,因此请将其更改回来.
我希望这有效.
| 归档时间: |
|
| 查看次数: |
5762 次 |
| 最近记录: |