ruby-on-rails - 代码何时属于 ruby​​ on Rails 中的模型?

标签 ruby-on-rails ruby-on-rails-3 rubygems ruby-on-rails-3.1

目前我正在进行大量的 Rails 3 实践,我正在开发一个身份验证系统,并且正在学习有关 Railscasts 的教程。来自 Railscasts 的 Ryan 对该教程进行了一些更新,并进行了一些细微的更改以利用 Rails 3.1

例如有_安全_密码

所以我的 Sessions_controller 中的一些代码更改为:

class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.find_by_username(params[:username])
    if user && user.authenticate(params[:password])
      session[:user_id] = user.id
      redirect_to root_path, :notice => "Logged In"
    else
      flash.now.alert = "Invalid Credentials"
      render "new"
    end
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_path, :notice =>"Logged Out"
  end

end

我想知道的是创建方法/操作中的某些代码是否应该在模型中?放置此代码是好还是坏做法?

当我想以正确的方式学习而不是养成坏习惯时,我应该遵循哪些规则,因为我已经超越了学习框架的那部分,在这个部分中,事情通常开始变得有意义,而不是变得更有意义。

感谢您的建议..

我特别想知道的是..
1. 程序员什么时候知道代码何时属于模型?他/她如何做出决定?

最佳答案

这是面向对象编程中最重要的问题之一。

一切都与责任有关。如果您认为模型负责该功能,请将代码放入模型中。

在您的示例中您会看到:

  • SessionController 仅负责创建和销毁用户 session 。
  • 用户负责身份验证。

所有业务逻辑都进入您的模型中。您的 Controller 负责填充您的 View 、处理用户的输入并将用户送上路。 View只是显示信息,几乎不包含任何逻辑(如果有的话)。

另外:查看现有项目以获取灵感(例如 Shopify )。

关于ruby-on-rails - 代码何时属于 ruby​​ on Rails 中的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546857/

相关文章:

ruby-on-rails - Ruby/Rails/Riot 以编程方式访问测试结果

ruby-on-rails - 为什么 Rails 不从应用程序/服务自动加载类?

ruby-on-rails-3 - 返回所有@articles,除了第一个

ruby-on-rails - 如何弃用 Rails 中的静态方法?

ruby - 错误 : "Could not find rake", 尚未安装 Rake

ruby-on-rails - Rails activeadmin 无法检测到现有表的自动增量字段

ruby-on-rails - 使用 ActiveSupport::Concern 实现 DCI

ruby-on-rails - 将 vendor/assets/javascripts 添加到我的有效 Assets 路线

mysql - Rails sql查询中动态传递参数

ruby-on-rails - 在 fastercsv 中转义逗号值