0

Rails を学習するために、データベースを使用しない単純なゲストブック アプリを作成しています。とにかく、これは私の見解がどのように見えるかです:

ビュー/guest_book_pages/home.html.erb

<h1>Guest Book</h1>

<%= @userinput %>

<%= form_for(:guestbook) do |f| %>
  <%= f.label :input %>
  <%= f.text_field :input %>

  <%= f.submit "Sign" %>
<% end %>

コントローラーは次のようになります。

controllers/guest_book_pages_controller.rb

class StaticPagesController < ApplicationController
  def home
    @userinput = params[:guestbook]["input"]
  end
end

「入力」をシンボル :input に変更するたびに、アプリケーションが壊れて次のような警告が表示されます: nil:NilClass の未定義メソッド `[]'

これの理由は何ですか?記号を使用できないのはなぜですか?

更新:文字列でも機能しなくなりました。何が起こっている?

更新#2:シンボルと文字列の両方で機能します。唯一の問題は、最初はロードされないことです。ページをロードできる場合は、どちらでも機能します。ページをロードするにはどうすればよいですか?

4

2 に答える 2

0

ページを初めてロードしたとき、params var は設定されていません。パラメータがあるのは、フォームを送信したときだけです

試す

@userinput = params[:guestbook]["input"] || ''

パラメータが見つからない場合、 @userinput を空の文字列に初期化します

編集:

これは、params が最初にゲストブックのキーを持っているかどうかを確認し、次にインスタンス var userinput を空の文字列に設定するか、存在する場合は [guestbook][input] の値を設定します。

他のすべてが失敗した場合、インスタンス var は空の文字列に初期化され、ビューでエラーが発生するのを防ぎます。

if params.has_key?(:guestbook)
    @userinput = params[:guestbook]["input"] || ''
else
    @userinput = ''
end
于 2013-05-03T14:42:45.180 に答える