Ruby 字符串将起作用,但Rails中的符号不起作用

Ruby 字符串将起作用,但Rails中的符号不起作用,ruby,syntax,ruby-on-rails-3.2,symbols,Ruby,Syntax,Ruby On Rails 3.2,Symbols,为了学习Rails,我正在编写一个不使用数据库的简单留言簿应用程序。 无论如何,这就是我的观点: views/guest\u book\u pages/home.html.erb <h1>Guest Book</h1> <%= @userinput %> <%= form_for(:guestbook) do |f| %> <%= f.label :input %> <%= f.text_field :input %&

为了学习Rails,我正在编写一个不使用数据库的简单留言簿应用程序。 无论如何,这就是我的观点:

views/guest\u book\u 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 %>
留言簿
控制器如下所示:

控制器/来宾\u书籍\u页面\u controller.rb

class StaticPagesController < ApplicationController
  def home
    @userinput = params[:guestbook]["input"]
  end
end
class StaticPagesController
每当我将“input”更改为symbol:input时,应用程序就会中断并向我发出警告:nil:NilClass的未定义方法“[]”

这是什么原因?为什么我不能使用符号

更新:现在它甚至不能使用字符串。发生了什么事


更新#2:它同时适用于符号和字符串。唯一的问题是它不会第一次加载。如果我能让页面加载,那么两者都可以。如何获取要加载的页面?

第一次加载页面时,未设置参数变量。只有在您提交表单时,才有参数

试一试

如果找不到参数,则将@userinput初始化为空字符串

编辑:

这将首先检查参数是否具有键guestbook,然后将实例var userinput设置为空字符串或[guestbook][input]的值(如果存在)

如果所有其他操作都失败,实例变量将初始化为空字符串,以防止视图中出现错误

if params.has_key?(:guestbook)
    @userinput = params[:guestbook]["input"] || ''
else
    @userinput = ''
end

操作用于处理某些内容,并渲染视图。 当你在家里,家的行动已被调用,并没有参数张贴了。 对于您的代码,home action应该是空的,它只是用来呈现主页。
您的句柄代码应该移动到一些操作,如登录,从而处理表单帖子,您可以获取参数。

我已经尝试过了,但问题仍然存在。我认为正是这样做:params[:guestbook][“input”]让它崩溃了。我想知道是否有任何方法可以在不检查参数本身的情况下检查参数是否未设置?实际上,我需要检查:input是否有任何值,当我这样做时,它再次中断。
if params.has_key?(:guestbook)
    @userinput = params[:guestbook]["input"] || ''
else
    @userinput = ''
end