2010-01-25 173 views
0

我对Rails很陌生。Rails:控制器和路由

Q1。控制器和视图之间的路线是什么?

比方说,我有一个名为store_controller控制器。我有在控制器中没有方法,但我有一个名为“清单”

再来看,我能够调用本地主机:3000 /存储/列表...为什么我能够调用此操作而无需在列表行动控制器? Q2302。如果我在控制器中添加如下列表方法会怎么样?如果我打电话给localhost:3000/store/list将会是什么路线?从控制器的列表方法,然后,查看?或首先查看和控制器列表方法?或控制器的列表方法将永远不会被调用?

def list 
    logger.Write 'list in Controller' 
end 

根据我的测试,控制器的list方法从来没有被调用。我不知道为什么。我正在关注“使用Rails进行敏捷Web开发,第3版”一书,我被困在了“任务C:推车创建”中。

Q3。如何从视图调用控制器的方法,而无需使用助手或没有该方法的任何模板文件?假设我在Controller中有一个名为DoSomething的方法。

def DoSomething 
    logger.Write 'd' 
end 

我可以从下面的视图调用这个方法吗?

<%= link_to "Do It", :action => "DoSomething" %> 

根据我的测试,它不起作用。

编辑:其实,视图可以通过Http Post调用控制器。假设我们在屏幕上看到的是视图。如果你点击按钮,它将会是http-post并且会呼叫控制器。这是我通过调用视图控制器的方法..

Q4的意思。如何在自定义日志文件中写入日志?如果我使用logger.Write,那么所有的日志都会写入到development.log中。我如何拥有自定义日志文件?

Q5。有没有什么办法像Ruby和Rails中的调度程序一样创建?如果我想创建类似调度程序或后端工作的应用程序,我应该使用Ruby还是Rails?例如每秒钟ping一个馈送,如果发生新的更改,则获取数据并将其插入数据库。

+0

如果您不清楚我的问题,请随时通知我。 – 2010-01-25 01:57:53

+0

对于Q5,我认为我可以使用rufus-scheduler gem – 2010-01-25 02:32:11

回答

2

这可能需要几个问题:P ...但它也是一个维基的良好基础。

Q1。 Rails使用约定 - 如果你有一个叫做“list”的视图,rails就足够聪明了,就像列表方法存在一样。当然,由于没有方法,你不会有任何逻辑,但视图仍然会呈现。 Q2302。 如果你添加一个列表方法,Rails现在会调用它。同样,Rails足够聪明地假设列表操作映射到列表视图。如果你想调整不同的视图,你可以使用控制器的内置“渲染”方法。

Q3。通常,您不应该从视图中调用控制器方法。这根本不是MVC模型的一部分。您可以将数据传递到视图中,您可以使用助手来获取所需的任何特定于视图的方法。如果您有大量的自定义逻辑,您可以开始将代码推送到模型中,甚至可以构建位于/ lib目录中的模块和类。

Q4。 有许多日志插件和扩展。我从来没有使用过它们,因为我总是发现默认绰绰有余。

Q5。 这绝对是一个完全不同的问题。建议开始一个新的,但做一个搜索,因为我知道这已在SO之前相当广泛地解决。有许多机制可以与Rails一起工作。

+0

谢谢。 Q2。哪一个应该先打电话?我的意思是,Controller.List然后ListView?或ListView,然后Controller.List? Q3。好的。但我应该能够从视图调用模型,对吧?比方说,我正在实施“保存”...我需要从View中调用Model.Save(),对吧? – 2010-01-25 03:17:16

+0

您不必调用控制器方法... rails为您处理。 您可以从控制器调用model.save。该观点应该只能有逻辑的介绍。 – 2010-01-25 03:41:34

+0

对不起。我不明白Rails如何为我处理它。如果我们调用http:// localhost/store/newstock,则Rails将自动调用“New Stock”视图,对吧?但如果用户点击“保存”按钮,我将需要从视图调用Controller.Save或Model.Save。对?如果我没有在View中提及它,Rails如何自动知道我想调用Save? – 2010-01-25 03:50:38