CRUD代表创建,读取,更新,删除。这是四种html" target="_blank">方法(如果区分查看一个记录和查看所有记录,则是五种方法)。在Rails中,处理CRUD的规范方法似乎包括七种方法。例如,使用
这就是我困惑的根源。为
class OrdersController < ApplicationController
def new
@order = Order.new
render
end
def create
@order = Order.new(order_params)
if @order.save
redirect_to @order, notice: 'Successfully created an order.'
else
render :new
end
end
end
在使用Rails之前,我使用了Yii(PHP),它有一个内置的CRUD生成器,生成如下代码(翻译成Rails:
class OrdersController < ApplicationController
def create
if request.method == "POST"
@order = Order.new(order_params)
if @order.save
redirct_to @order, notice: 'Successfully created an order.'
end
else
@order = Order.new
end
render
end
end
我喜欢这种模式的原因是因为它避免了为不同的控制器操作呈现模板。在第一个代码示例中,用户转到
我发现自己下意识地滑回了Rails代码中的Yii方式。谁能解释为什么标准的方式是有利的?如果我偏离了规范的Rails模式,我会遇到什么问题吗?
StackOverflow是在警告我,这个问题是主观的,很可能被关闭,所以让我来澄清一下。我并不是要讨论Rails vs.Yii,也不是要确定组织CRUD代码的最佳理论方法。我想知道如果我偏离了规范的Rails处理CRUD的方式,是否有任何关于Rails的东西会断裂。
简单的解释就是:
因为这是上帝和DHH的意图。
Rails CRUD约定非常实用,允许您避免与浏览器缓存和安全性相关的许多陷阱。
让我们举一个例子:
# config/routes.rb
resources :users, only: [:new, :create]
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
sign_in(@user)
redirect_to root_path
else
render :new
end
end
private
def user_params
params.require(:user).permit(:email, :password, :password_confirmation)
end
end
这里我们有两个单独的路由
第一条路由是幂等的--它对于任何访问者看起来都应该是一样的,并且可以缓存。第二个不是--它应该显示创建或试图创建资源的结果。
当用户访问时,我们将表单发布到不同的URI。这就避免了客户端中的历史记录问题。
如果输入无效,我们也会在相同的请求周期中呈现表单。这避免了在重定向中将表单数据传递回
时可能出现的安全问题,并让我们返回语义正确的响应代码,而不是重定向。
它还确保我们的应用程序在restful意义上是无状态的,因为如果我们访问
,前面的操作不会影响我们看到的内容。
在体系结构级别上,它允许您利用约定而不是配置。你可以这样做:
def new
@user = User.new
end
并且它将呈现
我有什么可用的选择来使用GWT来实现这一点?
假设我有这条路线 第一个示例将调用中的函数,但第二个示例我不知道将函数放在哪里,无论是在还是中,我是否应该将第二个示例放在中?还是在销毁功能中显示DiscountController?哪一种是最佳实践?
我想从spring控制器返回一个字符串(json字符串)作为它接收到的AJAX调用的响应,响应可能会根据我是否提交了@Valid表单而有所不同。这就是我处理它的方式,我想知道这是否被认为是最佳实践?请注意,我使用的是@RestController,所以@ResonseBody应用所有方法。
英文原文: http://emberjs.com/guides/routing/setting-up-a-controller/ URL的改变同时也可能改变显示的模板。而模板只有当其搭载了需要呈现的信息才有用。 在Ember.js中,模板从控制器中获取需要呈现的信息。 内置的两个控制器Ember.ObjectController和Ember.ArrayController,使控制器可以非常方便的呈
本文向大家介绍Laravel框架路由和控制器的绑定操作方法,包括了Laravel框架路由和控制器的绑定操作方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Laravel框架路由和控制器的绑定操作方法。分享给大家供大家参考,具体如下: 路由和控制器的关系 路由文件地址在\app\Http\routes.php,我们来看两种不同的路由。 以上均为绑定匿名函数的路由,虽然可以返回视图,也可以
问题内容: 这是一个现实的Angular问题,我无法解决。我喜欢Angular,但是这个问题现在困扰着我很多。 扩展现有控制器功能,并在应用程序的另一页上使用扩展控制器的最佳实践是什么?换句话说: 如何在Angular中继承控制器? 编辑 -2014年9月23日,不要以为我的原始用例的描述会帮助访问者更好地理解我在这里的用意。我认为这使人们偏离了真正的问题。 问题答案: 半年后,我想我完全了解发生