顯示具有 include 標籤的文章。 顯示所有文章
顯示具有 include 標籤的文章。 顯示所有文章

2009年2月2日 星期一

require,require_dependency,extend,include

extend vs include
* extend - class level
* include - instance level

require vs require_dependency
require_dependency wiki

require 是 ruby 的, require_dependency 是rails 的, 在development mode 時, 每個request 都會在load 一下

2008年12月17日 星期三

join,include

mysql, 是沒有include 這種東西的
在rails 下join 如

rails 用join 就是用inner join 弄成一整個大的object, association 就沒了
用include 有的時候因為條件裡直接需要用到另個table 的條件, 是用left join 但仍維持 association 的關係


另外rails 2.2 可以把 join 寫的high 一點了
Easy Join Table Conditions

join,include

mysql, 是沒有include 這種東西的
在rails 下join 如

rails 用join 就是用inner join 弄成一整個大的object, association 就沒了
用include 有的時候因為條件裡直接需要用到另個table 的條件, 是用left join 但仍維持 association 的關係


另外rails 2.2 可以把 join 寫的high 一點了
Easy Join Table Conditions

2008年9月18日 星期四

include, map


user 拿全部的x_alerts

[model]
belongs_to :user
has_many :x_alerts, :extend => XAlert::AssociationMethods, :through => :x_alert_relationships
has_many :x_alert_relationships



a = u.alert_targets.find(:all, :include => {:x_alert_relationships => :x_alert} )

AlertTarget Load (0.000180) SELECT * FROM `alert_targets` WHERE (`alert_targets`.user_id = 2590)
XAlertRelationship Load (0.000152) SELECT `x_alert_relationships`.* FROM `x_alert_relationships` WHERE (`x_alert_relationships`.alert_target_id IN (1,2,10,11))
XAlert Load (0.000212) SELECT * FROM `x_alerts` WHERE (`x_alerts`.id IN ('6','216','7','8','250','229','218','241','197','214','104','5'))

a.map {|e| xar = e.x_alert_relationships; xar.map { |k| h = k.x_alert; h[:cat] = k.created_at; h}}.flatten

2008年9月1日 星期一

model, include, left outer join


>>User.find(:all, :include => 'profile')
User Load (0.000682) SELECT * FROM `users`
Profile Load (0.000492) SELECT `profiles`.* FROM `profiles` WHERE (`profiles`.user_id IN (1,2,4,5))
Profile Columns (0.000880) SHOW FIELDS FROM `profiles`


>> User.find(:all, :include => 'profile', :conditions => "users.name is not NULL")
User Load (0.000731) SELECT * FROM `users` WHERE (users.name is not NULL)
Profile Load (0.000183) SELECT `profiles`.* FROM `profiles` WHERE (`profiles`.user_id IN (1,2,4,5))


User.find(:all, :include => 'profile', :conditions => "profiles.others is NULL")
User Load Including Associations (0.001349) SELECT `users`.`id` AS t0_r0, `users`.`name` AS t0_r1, `users`.
`password_salt` AS t0_r2, `users`.`password_hash` AS t0_r3, `users`.`email` AS t0_r4, `users`.`created_at` AS t
0_r5, `users`.`cookie_hash` AS t0_r6, `users`.`target_time_now` AS t0_r7, `users`.`reset_password_code` AS t0_r
8, `users`.`reset_password_code_until` AS t0_r9, `users`.`yahoo_userhash` AS t0_r10, `users`.`group_id` AS t0_r
11, `users`.`group_nickname` AS t0_r12, `users`.`time_zone` AS t0_r13, `profiles`.`id` AS t1_r0, `profiles`.`user_id` AS t1_r1, `profiles`.`others` AS t1_r2, `profiles`.`sex` AS t1_r3, `profiles`.`birth` AS t1_r4, `profiles`.`star` AS t1_r5, `profiles`.`blood` AS t1_r6, `profiles`.`address` AS t1_r7, `profiles`.`school` AS t1_r8, `profiles`.`job` AS t1_r9, `profiles`.`interest` AS t1_r10, `profiles`.`photo` AS t1_r11, `profiles`.`connect` AS t1_r12, `profiles`.`email_weekly` AS t1_r13 FROM `users` LEFT OUTER JOIN `profiles` ON profiles.user_id = users.id WHERE (profiles.others is NULL)