控制器助手在轨道上的红宝石

时间:2011-11-11 16:54:10

标签: 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,我只想在控制器上定义单独的处理程序,如下所示:

@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会提供类似的东西,还是我想错了?

感谢您的任何建议

2 个答案:

答案 0 :(得分:1)

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

其次,你可能把逻辑放在了错误的地方。您应该(1)具有单独的createcopy控制器操作,或者(2)将params传递给模型类,并让它确定它是在创建还是复制。 / p>

答案 1 :(得分:0)

你可以轻松地将它拆分为两个控制器动作,但实际上我确实相信在这两种情况下你都在创建一个新的实体。所以POST :create是一种很好的REST方式。如果你必须创建一个填充了给定属性的新项目,或者创建一个新项目作为另一个项目的副本并不重要imho。