2016-11-08 13 views
1

:nameが_formに渡され、それ以外のものが:nameに渡されない場合、条件付きで1つのことを行うにはどうすればよいですか? :nameなしURLに文字列が含まれている場合は?

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"}} 

が渡さ:

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が文字列が含まれる場合:

を通過した :name

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

しかし、私はしばしばURL短縮語を使用します。

は私のために動作しませんでした:だけでこれがチェックされます

<%= 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内の名前を[インスピレーション]を

+2

'params [:name]'ではなく 'params [:inspiration] [:name]'を試したことがありますか? – Pavan

+0

ああ、私は ':inspiration_name'をしましたが、そうはしませんでした。私はそれが動作するかもしれないと思うが、 'ActionView :: Template :: Error(未定義メソッド '[]' for nil:NilClass):' error。私はあなたに信用@Pavanを与えることができるように答えを提供できますか? –

+0

'params [:inspiration] [:name]'はエラーを引き起こしましたか? – Pavan

答えて

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 %> 
関連する問題