【问题标题】:If URL contains string?如果 URL 包含字符串?
【发布时间】:2017-03-21 16:25:45
【问题描述】:

如果: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 缩短器。

不适合我:

【问题讨论】:

  • 你试过params[:inspiration][:name]而不是params[:name]吗?
  • 啊,我做了:inspiration_name,但不是那样。我认为这可能有效,但我收到ActionView::Template::Error (undefined method '[]' for nil:NilClass): 错误。你能提供一个答案,以便我给你@Pavan 的功劳吗?
  • params[:inspiration][:name] 触发了错误?
  • 是的@Pavan。杰迪普明白了。感谢您的帮助!

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


【解决方案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 %>

这将检查 params[:inspiration] 中的 :name 仅当后者存在时。所以,应该不会发生错误。

【讨论】:

    【解决方案2】:

    您可以使用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 %>
    

    【讨论】:

      猜你喜欢
      • 2014-02-11
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 2012-10-05
      • 2011-03-14
      • 1970-01-01
      相关资源
      最近更新 更多