为什么我可以在参数中使用params [:from]?
嗨, 我是新来的Ruby和Rails,我做了一个小的测试例子:为什么我可以在参数中使用params [:from]?
/应用/助理/
module HomeHelper
def makeach(from, to, by)
x = from
while x <= to
yield x
x = x + by
end
end
end
/apps/view/home/new.erb
<form action="create" method="post">
<input type="text" name="from" />
<input type="text" name="to" />
<input type="text" name="by" />
<input type="submit" name="commit" value="Click it" />
</form>
/apps/views/home/create.erb
模块HomeHelper
<% makeach(params[:from], params[:to], params[:by]) do |x| %>
<%= x %>
<% end %>
/apps/controllers/home_controller.rb
class HomeController < ApplicationController
def index
end
def create
end
def new
end
end
后,我发布形式action new
,将create view
输出没有在浏览器 PS:我知道有很多方法来改善我的代码,但在这里,我只想知道为什么我什么都没有。
所以,你缺少的一件事就是REST的基本思想。有关Rails如何处理控制流的详细说明,请尝试this answer。
但是,基本上,当您在路线中设置resources :home
时,它将为您的七个标准控制器操作(SHOW,INDEX,NEW/CREATE,EDIT/UPDATE,DESTROY)定义seven routes。
当您尝试在浏览器中加载页面时,您发送的是GET请求。 NEW操作接受GET请求。 CREATE操作只接受POST请求(如提交表单)。因此,在将表单发布到CREATE操作后,如果要显示访问者的内容,则需要重定向到接受GET请求的页面。
或者可能会覆盖Rails的默认值,以允许CREATE接受GET请求,但我会认为这是一个坏主意。
也许你需要做的最简单的事情是确保你创建动作在你的控制器看起来是这样的:
def create
(... do whatever processing of the params you want to do here ...)
redirect_to home_path # OR whatever other path you want.
end
在一个控制器动作,您可以渲染(默认)或重定向结束。重定向只是跳转到另一个控制器操作并执行该操作中的任何操作。渲染通常显示与控制器操作同名的视图,但渲染有很多选项see here。
要访问视图中的参数,最好的办法是将它们分配给一个实例变量。 IE:
def ... # any action that accepts GET requests
@value = params[:value]
end
但是,params在重定向后不会持续。因此,如果您POST一个动作并重定向到另一个动作(正常惯例),则需要将参数保存到数据库,或将它们保存到session。
在你的情况下,你应该将它们存储在会话中,因为它们似乎没有附加到模型上。
然后在下一个控制器动作中,您将检查会话中是否存在某些变量,并将它们放入实例变量中以在视图中使用。
IE:
@value = session[:value] if session[:value]
我知道这是一个大量吸纳,但我希望这可以帮助你换你的头脑周围发生了什么事情。最后一个建议是购买并阅读Beginning Rails 3。它简短而又甜蜜,只是需要花上一个周末才能完成,最后你会真正理解铁轨运作的全貌,你的生产力和未来的学习将会翻两番。
祝你好运!
助手确实可以访问参数,您是否尝试将其转换为整数? params [:from] .to_i – apneadiving 2011-03-03 09:12:17
嗯,可以肯定的是:通常,在粗糙设计中,没有创建视图。根据保存的状态显示新的或显示。你明白了吗? – apneadiving 2011-03-03 09:13:59
你可以在控制器中显示你的创建方法吗? – rubyprince 2011-03-03 11:09:18