要学习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”更改为symbol:input时,应用程序就会断开并给出一个警告:unil方法`[]'为nil:NilClass
这是什么原因?为什么我不能使用符号?
更新:现在它甚至不能使用字符串。到底是怎么回事?
更新#2:它适用于符号和字符串。唯一的问题是它不会第一次加载。如果我可以加载页面,那么任何一个都可以工作。如何才能加载页面?
答案 0 :(得分: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
答案 1 :(得分:0)
动作用来处理某些东西,并渲染视图。 当你回家时,家庭行动已被召唤,现在没有发布任何参数。 对于你的代码,home动作应该是空的,它只是为了渲染home_page。 你的句柄代码应该移动到像sign_in这样的动作,whitch处理表格帖子你就可以获得参数。