如果URL包含字符串?

时间:2016-11-08 06:19:18

标签: ruby-on-rails ruby ruby-on-rails-4 conditional

如果将:name传递给_form,如果:name未传递给另一件事,我如何使用条件来做一件事?

通过:name

Started GET "/inspirations/new?inspiration%5Bname%5D=Always+trust+yourself+more+than+you+doubt+yourself" for 127.0.0.1 at 2016-11-08 01:00:44 -0500
Processing by InspirationsController#new as HTML
  Parameters: {"inspiration"=>{"name"=>"Always trust yourself more than you doubt yourself"}}

没有通过:name

Started GET "/inspirations/new" for 127.0.0.1 at 2016-11-08 01:16:18 -0500
Processing by InspirationsController#new as */*
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 1]]
  CACHE (0.0ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 1]]
  Inspiration Load (0.4ms)  SELECT  "inspirations".* FROM "inspirations" WHERE "inspirations"."id" IS NULL LIMIT 1
  Rendered inspirations/_form.html.erb (4.1ms)
  Rendered inspirations/new.html.erb within layouts/modal (5.9ms)
Completed 200 OK in 49ms (Views: 41.9ms | ActiveRecord: 0.7ms)

_form

<%= simple_form_for(@inspiration) do |f| %> 
  <%= f.text_area :name %>
  <% if params[:name].nil? %> # Should Be Triggered If No :name Is Present in URL
    etc...
  <% end %>
<% end %>

例如,当URL包含字符串时:

http://www.livetochallenge.com/inspirations/new?inspiration%5Bname%5D=Life+would+be+easier+if+I+had+the+source+code.

但我经常使用URL缩短器。

对我不起作用:

2 个答案:

答案 0 :(得分:1)

试试这个:

<%= simple_form_for(@inspiration) do |f| %> 
  <%= f.text_area :name %>
  <% if params[:inspiration].try(:[], :name).nil? %> # Should Be Triggered If No :name Is Present in URL
    etc...
  <% end %>
<% end %>

这将检查:只有在后者存在的情况下,参数[:灵感]内的名称。所以,不应该发生错误。

答案 1 :(得分:0)

您可以使用fetch来避免错误。

<%= simple_form_for(@inspiration) do |f| %> 
  <%= f.text_area :name %>
  <%= f.text_area :name %>
  <% name = params.fetch(:inspiration, {}).fetch(:name, nil) %>
  <% if name.nil? %> 
    etc...
  <% end %>
<% end %>