1

私が実装しようとしている非常に単純なプロセス。ホームページまたはランディング ページで、メーリング リスト用のメールをキャプチャしたいと考えています。電子メールが検証に合格すると、保存されます。エラーがなければ、すべて正常に動作します。

以下のログのように、「a」文字だけを入力したようなエラーが発生した場合。または、空の文字列でさえ、私は継続的に同じものを取得しますTypeError(nilを文字列に変換できません)

ログは次のとおりです。

Started GET "/" for 127.0.0.1 at 2013-06-13 13:48:56 -0400
Connecting to database specified by database.yml
Processing by HighVoltage::PagesController#show as HTML
Parameters: {"id"=>"home"}
Rendered shared/_error_messages.html.erb (0.4ms)
Rendered layouts/_visitor_form.html.erb (7.9ms)
Rendered pages/home.html.erb within layouts/application (13.1ms)
Completed 200 OK in 82ms (Views: 39.6ms | ActiveRecord: 1.8ms)
[2013-06-13 13:48:57] WARN  Could not determine content-length of response body. Set       content-length of the response or set Response#chunked = true


Started POST "/visitors" for 127.0.0.1 at 2013-06-13 13:48:59 -0400
Processing by VisitorsController#create as HTML
Parameters: {"utf8"=>"✓",authenticity_token"=>"esTPNzNtkmNPTe7Jh+E2aDHNrgocU5Z8g49Nj0QiOhQ=",    "visitor"=>{"email"=>""}, "commit"=>"Add to newsletter list"}
(0.1ms)  begin transaction
Visitor Exists (0.2ms)  SELECT 1 AS one FROM "visitors" WHERE LOWER("visitors"."email") =     LOWER('') LIMIT 1
(0.1ms)  rollback transaction
Completed 500 Internal Server Error in 39ms

TypeError (can't convert nil into String):
app/controllers/visitors_controller.rb:12:in `create'

ここに Visitor_controller.rb があります

 def create
    @visitor = Visitor.new(params[:visitor])
     if @visitor.save
        flash[:success] = "Your email has been added!"
       redirect_to '/'
     else
       render '/'
     end
 end

私も試してみました

@visitor = Visitor.new(:visitor => params[:visitor][:email])

成功しなかった他のいくつかのシーケンス。

失敗した保存を取得して、検証エラーを適切に表示し、ユーザーが再送信できるようにするにはどうすればよいですか。

レイアウトは次のとおりです。

    <%= form_for Visitor.new  do |f| %>
            <%= render 'shared/error_messages' %>
            <%= f.label :email %>
            <%= f.text_field :email %>

    <%= f.submit "Add to newsletter list", class: "btn btn-large btn-primary" %>
    <% end %>

たぶん、高電圧の宝石が私を台無しにしています。知るには経験が足りない。

アップデート:

rake routes
visitors POST /visitors(.:format) visitors#create
home      /home(.:format)     pages#home
root      /                   high_voltage/pages#show {:id=>"home"}
page GET  /pages/*id          high_voltage/pages#show
4

1 に答える 1

1

問題は、render '/'インデックス ページをレンダリングしないことです。レンダリングするアクション ページを指定する必要があります。ルートによると、この行は次のようになります。

render 'pages/home'
于 2013-06-13T19:07:49.023 に答える