rails中的“ new”和“ build”有什么区别?

时间:2018-12-10 07:40:13

标签: ruby-on-rails

我不明白这行代码:

@club = current_user.clubs.build(club_params)

我知道可以使用new方法创建相同的代码,然后我们可以保存实例变量,但是build在这种情况下会做什么?

2 个答案:

答案 0 :(得分:3)

new用于特定模型的新实例:

        foreach (var message in messages)
        {
            // Get Body first
            var body = System.Text.Encoding.UTF8.GetBytes(message["Body"].ToString());
            // Empty Body section to deserialize properties
            message["Body"] = "";
            var SBMessage = JsonConvert.DeserializeObject<Message>(message.ToString());
            SBMessage.Body = body;
            log.LogInformation("Sending Message");
            outputSbQueue.Add(SBMessage);
            log.LogInformation("Sent message: " + SBMessage.MessageId);
        }

build用于在AR关联中创建新实例:

foo = Foo.new

bar = foo.build_bar  # (has_one or belongs_to)

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

更新

build和new是ActiveRecord::Relation中定义的别名:

因此,如果类Foo拥有has_many Bars,则以下内容具有相同的效果:

  • bar = foo.bars.build # (has\_many, habtm or has_many :through) <=> foo.bars.new
  • foo.bars.build <=> Bar.where(:foo_id=>foo.id).new

如果Bar.where(:foo_id=>foo.id).build

  • !foo.new_record? <=> foo.bars.new

答案 1 :(得分:0)