【译】使用模型的回调

Saturday, July 24, 2010

原文:
http://rails-bestpractices.com/posts/5-use-model-callback

使用模型的回调可以避免在控制器中的CRUD方法中写一些逻辑代码

丑陋的...

<% form_for @post do |f| %>
  <%= f.text_field :content %>
  <%= check_box_tag 'auto_tagging' %>
<% end %>



class PostsController < ApplicationController
  def create
    @post = Post.new(params[:post])

if params[:auto_tagging] == '1'
      @post.tags = AsiaSearch.generate_tags(@post.content)
    else
      @post.tags = ""
    end

@post.save
  end
end

在这个例子中, 如果用户点了auto_tagging这个复选框, 我们讲会根据文章的内容来生成标签,
然后在保存之前把标签赋值给这篇文章,我们可以把标签的赋值代码移到模型中通过模型的回调来处理。

重构...

class Post < ActiveRecord::Base
  attr_accessor :auto_tagging
  before_save :generate_tagging

private
  def generate_taggings
    return unless auto_tagging == '1'
    self.tags = Asia.search(self.content)
  end
end

<% form_for @post do |f| %>
  <%= f.text_field :content %>
  <%= f.check_box :auto_tagging %>
<% end %>



class PostsController < ApplicationController
  def create
    @post = Post.new(params[:post])
    @post.save
  end
end

和你看到的那样,
我们在Post模型中创建了一个before_save回调方法来生成标签并赋值(如果用户点击了auto_tagging这个复选框),
这样在控制器中就不必关心模型的逻辑了。

This entry was tagged Rails and Best-Practices

comments powered by Disqus

© 2009-2013 lxneng.com. All rights reserved. Powered by Pyramid

go to Top