我的应用程序定义了Employee和Company模型之间的一对多关系。我使用公司夹具(37_signals
)的标签为Employee夹具分配了公司。但是,我还需要分配由company_uuid
生成的SecureRandom.uuid
。
class Employee
belongs_to :company
end
class Company
has_many :employees
end
employee:
name: dhh
company: 37_signals
company_uuid: <%= "Access the 37_signals company fixture's uuid here!" %>
37_signals:
name: $LABEL
company_uuid: <%= SecureRandom.uuid %>
如何在另一个FixtureSet中访问Fixture的属性?
我尝试使用以下行作为解决方案:
company_uuid: <%= ActiveRecord::FixtureSet.identify(:37_signals).company_uuid %>
以上查找公司的主键id
值,然后调用company_uuid
方法,该方法未定义整数。这是无效的。
company_uuid: <%= companies(:37_signals).company_uuid %>
以上查找报告undefined method 'companies' for main:Object
有解决此问题的传统方法吗?
答案 0 :(得分:2)
这是我能够设计的最佳解决方案:
mNotificationManager = (NotificationManager)
this.getSystemService(Context.NOTIFICATION_SERVICE);
Intent resultIntent = new Intent(this, AcceptRejectActivity.class);
resultIntent.putExtra("message","Do you choose to accept this message?");
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
String msg = "You have a message"
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_logo)
.setContentTitle("Message")
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(msg))
.setContentText(msg)
.setPriority(Notification.PRIORITY_HIGH);
mBuilder.setContentIntent(contentIntent);
mBuilder.setAutoCancel(true);
android.app.Notification note = mBuilder.build();
note.defaults |= android.app.Notification.DEFAULT_VIBRATE;
note.defaults |= android.app.Notification.DEFAULT_SOUND;
mNotificationManager.notify(0, note);
但是,此解决方案似乎不是传统。 此外,我相信这会成功运气,因为灯具按字母顺序加载。如果实际上,通过反复试验,我确定此方法适用于相反的方向,所以alpha阶没有任何不利影响。company_uuid: <%= Company.find(ActiveRecord::FixtureSet.identify(:publish_and_export_album)).company_uuid %>
被命名为Company
,请在Organization
之后加载,那么我认为这不会按预期工作。
答案 1 :(得分:2)
嗯,第一个选项应该是干掉数据,所以它只存在于一个地方。您可以使用delegate
执行此操作,以便employee.company_uuid
始终回答employee.company.company_uuid
。
如果你真的需要在Employee模型中,下一个最好的选择是使用回调(如before_validate
或after_save
,具体取决于你的用例),从而复制公司到Employee对象。您希望消除数据值与其真正来源不同的机会。
最后,您可以将所有UUID提取到创建时两个灯具都可访问的哈希值,并设置两个值,如:
company_uuid: <%= UUIDs['37_signals'] %>
......或类似的
答案 2 :(得分:0)
如果您使用the fixture_builder gem,这不是问题。它允许您构建模型对象的图形并为它们提供夹具名称,并将它们保存到.yml夹具文件中。