2013-05-03 65 views
0

要学习Rails,我正在编写一个不使用数据库的简单留言簿应用程序。 无论如何,这是我的看法是什么样子:字符串将在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 

每当我将“输入”更改为符号:输入时,应用程序会中断并给出警告,说明:undefined method [[]'for无:NilClass

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

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

更新#2:它适用于符号和字符串。唯一的问题是它不会第一次加载。如果我可以加载页面,那么两者都可以工作。我怎样才能加载页面?

回答

0

动作用来处理一些东西,并渲染视图。 当你在家中时,家庭行为已被调用,并且现在没有任何参数。 为你的代码,主动作应该是空的,它只是呈现home_page。 你的句柄代码应该移动到像sign_in这样的动作,处理表单文章,你可以得到参数。

0

第一次加载页面时,params var没有设置。只有当您提交表单背部有PARAMS

尝试

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

这将@userinput初始化为空字符串,如果没有找到PARAMS

编辑:

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

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

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

我试过了,但问题仍然存在。我认为这样做的行为:params [:留言簿] [“输入”]正在破坏。我想知道是否有任何方法检查参数是否没有设置而没有检查参数本身? – learningrails123 2013-05-03 14:46:05

+0

你有没有试过'if params.has_key?(:guestbook)' – fullybaked 2013-05-03 14:48:19

+0

实际上,我需要检查:input是否有任何值,当我这样做时,它会再次破坏。 – learningrails123 2013-05-03 15:03:57

相关问题