如果存在@search,则仅显示text_field的值

时间:2013-09-14 08:12:29

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个搜索表单,用于我的搜索模型。我的问题是,如果存在@search,我只想显示表单的值。我写了这段代码:

 <%= f.text_field :keyword, :value => @search.keyword if @search.present? %>

我的问题是,当@search不存在时,不会显示整个表单!我只希望在这种情况下不显示该值!

UPDATE UPDATE :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

我写了一个小帮手:

def value(link)
 if @search.present?
  value: @search.link
 end
end

以我的形式:

<%= f.text_field :keyword, value(keyword) %> 

但为什么我会收到这个错误:

s_helper.rb:4: syntax error, unexpected ':', expecting keyword_end value: @search.link

4 个答案:

答案 0 :(得分:2)

如果我理解你,如果没有@search,你仍然希望显示空输入。如果是这样,这应该做你想要的:

  <%= f.text_field :keyword, :value => @search.try(:keyword) %>

有关try方法的信息,请参阅此文章 - http://everydayrails.com/2011/04/28/rails-try-method.html

答案 1 :(得分:0)

试试这个

<%= f.text_field :keyword, :value => @search.keyword %> <% if @search.present? %>

答案 2 :(得分:0)

我猜你有类似的东西。

<%= form_for @search do |f| %>

将其更改为

<%= form_for (@search || Search.new) do |f| %>

然后从表单字段中删除所有@search...内容。

答案 3 :(得分:0)

您可以使用通过Rails API提供的present?方法,

<% if @search.present? %>
  <%= f.text_field :keyword, :value => @search.keyword %>
<% end %>

有关详细信息,请参阅here