标签: model

Rails before_validation剥离空白最佳实践

我希望我的用户模型在保存之前清理一些输入.现在一些简单的空白剥离就可以了.因此,为了避免人们注册"哈利"并假装成"哈利",例如.

我认为在验证之前进行这种剥离是个好主意,这样validates_uniqueness_of可以避免意外的重复.

class User < ActiveRecord::Base
  has_many :open_ids

  validates_presence_of :name
  validates_presence_of :email
  validates_uniqueness_of :name
  validates_uniqueness_of :email
  validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i

  before_validation :strip_whitespace, :only => [:name, :email, :nick]

  private
  def strip_whitespace(value)
    value.responds_to?('strip') ? value.strip : value
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,此代码附带错误ArgumentError:错误的参数数量(0表示1).我假设回调将传递值.

另外:这个剥离实际上是个好主意吗?或者我应该在空间上验证并告诉用户"Harry"包含无效的spacess(我想允许"Harry Potter"而不是"Harry\s\sPotter").

编辑:正如评论中所指出的,我的代码是错误的(这就是我问问题的原因).除了我的问题之外,请确保您阅读接受的答案以获取正确的代码,并避免我犯的错误.

validation model ruby-on-rails

54
推荐指数
12
解决办法
4万
查看次数

DDD和MVC:'模型'和'实体'之间的区别

我对MVC中"模型"的概念感到非常困惑.今天存在的大多数框架将模型放在Controller和数据库之间,而模型几乎就像数据库抽象层.随着Controller开始做越来越多的逻辑,'Fat Model Skinny Controller'的概念就丢失了.

在DDD中,还有域实体的概念,它具有唯一的身份.据我了解,用户是实体的一个很好的例子(例如,唯一的用户ID).实体有一个生命周期 - 它的值可以在整个动作过程中改变 - 然后它被保存或丢弃.

我上面描述的实体是我认为模型应该在MVC中的内容?我有多偏离基础?

为了使事情更加混乱,你会引入其他模式,例如Repository模式(可能会在其中放置一个Service).很清楚Repository如何与实体交互 - 它与模型有什么关系?

控制器可以有多个模型,这使得模型看起来像一个"数据库表"而不是一个独特的实体.

更新: 在这篇文章中,模型被描述为具有知识的东西,它可以是单数或对象的集合.所以听起来更像是一个实体,一个模型或多或少都是一样的.模型是一个包罗万象的术语,其中实体更具体.值对象也是一个模型.至少在MVC方面.也许???

所以,从非常粗略的角度来看,哪个更好?

没有"模特"真的......

class MyController {
    public function index() {
        $repo = new PostRepository();
        $posts = $repo->findAllByDateRange('within 30 days');
        foreach($posts as $post) {
            echo $post->Author;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或者这个,它有一个模型作为DAO?

class MyController {
    public function index() {
        $model = new PostModel();
        // maybe this returns a PostRepository?
        $posts = $model->findAllByDateRange('within 30 days');
        while($posts->getNext()) {
            echo $posts->Post->Author;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个例子都没有做我上面描述的内容.我很丢失.有什么输入?

php model-view-controller entity domain-driven-design model

53
推荐指数
3
解决办法
2万
查看次数

仅在创建和更新时进行Rails模型验证

如果我只想在create上进行验证,那么我可以做

validates_presence_of :password, :on => :create
Run Code Online (Sandbox Code Playgroud)

但是我怎么说创建和更新?我尝试了这个,但它不起作用:

validates_presence_of :password, :on => [ :create, :update ]
Run Code Online (Sandbox Code Playgroud)

我必须定义两次验证吗?

validation model ruby-on-rails

51
推荐指数
2
解决办法
5万
查看次数

使用DataAnnotations和DataType进行电子邮件模型验证

我有以下型号:

public class FormularModel
{
    [Required]
    public string Position { get; set; }
    [Required]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
    [Required]
    public string Webcode { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

必需的验证工作正常.但是当我尝试使用DataType时它没有反应.

这是我的电子邮件控件的剃刀代码:

   @Html.TextBoxFor
          (model => model.Email, 
           new { @style = "width: 175px;", @class = "txtField" }
          ) * 
Run Code Online (Sandbox Code Playgroud)

那么,有人知道答案吗?

TIA

c# email validation asp.net-mvc model

51
推荐指数
2
解决办法
8万
查看次数

Rails after_initialize仅限于"new"

我有以下2个型号

class Sport < ActiveRecord::Base
  has_many :charts, order: "sortWeight ASC"
  has_one :product, :as => :productable
  accepts_nested_attributes_for :product, :allow_destroy => true
end

class Product < ActiveRecord::Base
  belongs_to :category
  belongs_to :productable, :polymorphic => true
end
Run Code Online (Sandbox Code Playgroud)

如果没有产品,运动就不可能存在,所以sports_controller.rb我的拥有:

def new
  @sport = Sport.new
  @sport.product = Product.new
...
end
Run Code Online (Sandbox Code Playgroud)

我试图将产品的创建转移到运动模型,使用after_initialize:

after_initialize :create_product

def create_product
 self.product = Product.new
end
Run Code Online (Sandbox Code Playgroud)

我很快就知道after_initialize只要模型被实例化(即来自一个find调用)就会被调用.所以这不是我想要的行为.

我应该如何建模所有人sport都有的要求product

谢谢

model ruby-on-rails nested-attributes

51
推荐指数
3
解决办法
3万
查看次数

检查对象是否存在

我需要检查是否Model.objects.filter(...)有任何东西,但不需要插入任何东西.到目前为止我的代码是:

user_pass = log_in(request.POST)  # form class
if user_pass.is_valid():
    cleaned_info = user_pass.cleaned_data
    user_object = User.objects.filter(email = cleaned_info['username'])
Run Code Online (Sandbox Code Playgroud)

python database django model view

51
推荐指数
5
解决办法
9万
查看次数

DDD - 持久性模型和领域模型

我正在尝试学习域驱动设计(DDD),我认为我有了基本的想法.但是有些让我困惑的事情.

在DDD中,持久性模型和域模型是不同的东西?我的意思是,我们设计的域名和类只考虑了域名问题; 没关系.但在那之后,当我们构建我们的存储库或任何其他数据持久性系统时,我们是否应该创建另一个模型以在持久层中使用?

我在想我们的域模型也用于持久化,这意味着我们的存储库从查询返回我们的域对象.但今天,我读了这篇文章,我有点困惑:

刚刚停止!域模型不是持久性模型

如果这是真的,那么从域对象中获得单独的持久性对象会有什么好处?

oop domain-driven-design model repository repository-pattern

51
推荐指数
3
解决办法
2万
查看次数

如何在Ruby on Rails中验证一对id的唯一性?

假设在Ruby中进行以下数据库迁移:

    create_table :question_votes do |t|
      t.integer :user_id
      t.integer :question_id
      t.integer :vote

      t.timestamps
    end

进一步假设我希望DB中的行包含唯一(user_id,question_id)对.为了实现这一目标,在模型中投入的正确粉尘是什么?

validates_uniqueness_of :user_id, :question_id
似乎只是通过用户ID使行唯一,并且通过问题ID使其唯一,而不是由对唯一.

validation model ruby-on-rails unique-constraint

50
推荐指数
5
解决办法
3万
查看次数

模型和实体之间有什么区别

我很难理解这个词的含义是什么:

Entity,Model,DataModel,ViewModel

任何人都可以帮我理解他们吗?谢谢你们.

entity entity-framework model datamodel viewmodel

50
推荐指数
4
解决办法
3万
查看次数

从Core Data实体生成Swift模型

Xcode 8更新:

在Xcode 8中,需要转到Core Data Model Editor和Show the File Inspector.靠近底部是代码生成的选项.选择Swift.

编辑:我找到了从Core Data实体生成Swift模型的解决方案:

在Xcode上:

编辑>创建NSManagedOjbect>单击按钮"下一步">单击"下一步"按钮>选择"Swift"Langage>单击"创建"按钮


我使用Core Data在Xcode 6 beta上创建了一个新的Swift项目,尝试了Swift语言.

当我从Core Data的实体生成模型时,Xcode创建了Objective-C模型.

有没有办法用Core Data生成Swift模型而不是Obejctive-C模型?

谢谢 !

xcode model core-data nsmanagedobject swift

50
推荐指数
3
解决办法
4万
查看次数