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 %>

控制器看起来像这样:

控制器/guest_book_pages_controller.rb

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

每当我将“输入”更改为符号 :input 时,应用程序就会中断并给我一个警告,上面写着:undefined method `[]' for nil:NilClass

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

更新:现在它甚至不适用于字符串。到底是怎么回事?

update#2:它适用于符号和字符串。唯一的问题是它不会第一次加载。如果我可以加载页面,那么任何一个都可以。如何让页面加载?

4

2 回答 2

0

第一次加载页面时,未设置 params var。只有当您提交表单时才会有参数

尝试

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

如果未找到参数,这会将 @userinput 初始化为空字符串

编辑:

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

如果一切都失败了,实例 var 将被初始化为一个空字符串,以防止您的视图出现错误。

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

动作用于处理某些事情,并渲染视图。当你回家时,已经调用了 home 动作,并且现在没有发布任何参数。对于您的代码,主页操作应该是空的,它只是为了呈现主页。你的句柄代码应该移动到一些动作,比如登录,处理表单帖子,你可以获得参数。

于 2013-05-03T14:58:10.947 回答