Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails中的控制器助手_Ruby On Rails_Ruby_Model View Controller - Fatal编程技术网

Ruby on rails RubyonRails中的控制器助手

Ruby on rails RubyonRails中的控制器助手,ruby-on-rails,ruby,model-view-controller,Ruby On Rails,Ruby,Model View Controller,我是rails的新手,我想知道这是否是实现我想做的事情的最佳方式 我有一个创建实体的控制器 根据提交的内容,我想从头创建一个新实体,或者复制一个现有实体 到目前为止我有 def create if(params[:copy]) return copy_existing_entity params else return create_new_entity params end end 到目前为止,这让人觉得恶心——是否应该采取不同的做法 来自java spring,

我是rails的新手,我想知道这是否是实现我想做的事情的最佳方式

我有一个创建实体的控制器

根据提交的内容,我想从头创建一个新实体,或者复制一个现有实体

到目前为止我有

def create
  if(params[:copy])
    return copy_existing_entity params
  else
    return create_new_entity params
  end
end
到目前为止,这让人觉得恶心——是否应该采取不同的做法

来自java spring,我将在控制器上定义单独的处理程序,如下所示:

@RequestMapping(method = RequestMethod.POST, params="submit=Action 1")
public ModelAndView action1(@RequestParam("selectedItemKey") String key) {
    ModelAndView mav = new ModelAndView("action1");
    //Business logic
    return mav;
}

@RequestMapping(method = RequestMethod.POST, params="submit=Action 2")
public ModelAndView action2(@RequestParam("selectedItemKey") String key) {
    ModelAndView mav = new ModelAndView("action2");
    //Business logic
    return mav;
}
rails是否提供了类似的功能,或者我的想法是错误的


谢谢你的建议,这看起来确实有点糟糕。首先,为什么要首先复制实体?你的用例是什么


其次,你可能把逻辑放错地方了。您可能应该(1)执行单独的
create
copy
控制器操作,或者(2)将
params
传递给model类,让它确定是创建还是复制。

这看起来确实有点糟糕。首先,为什么要首先复制实体?你的用例是什么


其次,你可能把逻辑放错地方了。您可能应该(1)执行单独的
创建
复制
控制器操作,或者(2)将
参数
传递给模型类,让它确定是创建还是复制。

您可以轻松地将其拆分为两个控制器操作,但事实上,我相信在这两种情况下,你都在创造一个新的实体。因此,一个
POST:create
是很好的休息方式。如果您必须创建一个包含给定属性的新项目,或者创建一个新项目作为另一个项目的副本,这并不重要。

您可以通过两个控制器操作轻松地将其拆分,但实际上我相信,在这两种情况下,您都在创建一个新实体。因此,一个
POST:create
是很好的休息方式。如果您必须创建一个充满给定属性的新项目,或者创建一个新项目作为另一个项目的副本,这并不重要。

如果我向控制器添加一个复制操作,默认情况下是由不同的路由触发的,还是我需要指定一个参数。我的理解是ruby根据HTTP动词触发了不同的动作,我只有4个…你可以用任何你喜欢的方式触发你的控制器动作。我可能会给它一个单独的路径(即自定义的REST操作),但这取决于您。想想什么URL最适合您尝试创建的UI。再说一遍:您的用例是什么?澄清一下:Rails路由同时关注HTTP动词和URL。用户使用图形界面构建了一个数据树,该图形界面保存在数据库中。在复制场景中,我想用这棵树构建一个列表,该列表将作为一个单独的实体持久化,用户可以在不更改原始树的情况下进行编辑。如果列表是从树导出的,那么它是否应该尽可能与原始树保持绑定?如果我向控制器添加复制操作,默认情况下是由不同的路由触发还是需要指定参数。我的理解是ruby根据HTTP动词触发了不同的动作,我只有4个…你可以用任何你喜欢的方式触发你的控制器动作。我可能会给它一个单独的路径(即自定义的REST操作),但这取决于您。想想什么URL最适合您尝试创建的UI。再说一遍:您的用例是什么?澄清一下:Rails路由同时关注HTTP动词和URL。用户使用图形界面构建了一个数据树,该图形界面保存在数据库中。在复制场景中,我想用这棵树构建一个列表,该列表将作为一个单独的实体持久化,用户可以在不更改原始树的情况下进行编辑。如果列表是从树导出的,那么如果可能的话,它不应该与原始树绑定吗?