我尝试创建一个多态关联,这在Rails中很常见,但遗憾的是在Yii2中没有.作为实现的一部分,我需要定义关系:
public function getImages()
{
return $this->hasMany(RecipeImage::className(),
['imageable_id' => 'id', 'imageable_type' => 'Person']);
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为'Person'被视为当前模型的属性,但它是一个常量(多态关联的类名).
如果我尝试使用'andWhere',它当然会在WHERE子句而不是ON子句中添加条件,导致只返回包含现有图像的记录.
public function getImages()
{
return $this->hasMany(RecipeImage::className(), ['imageable_id' => 'id'])->
andWhere(['imageable_type' => 'Ingredient']);
}
Run Code Online (Sandbox Code Playgroud)
我该如何定义关系?没有andOn方法.
我在我的rspec测试中使用以下代码:
describe "Save should create a BasketItem and a Basket" do
subject {
lambda {
click_button I18n.t(:create_basket_and_add_items)
page.driver.browser.switch_to.alert.accept # close the alert box
}
}
it { should change(BasketItem, :count).by(1) }
it { should change(Basket, :count).by(1) }
end
Run Code Online (Sandbox Code Playgroud)
该click_button火灾一个不显眼的JavaScript调用,显示一条警告弹出窗口.但是,关闭警报框仅在大约50%的测试运行中成功,我猜是因为警报框在命令page.driver.browser.switch_to.alert.accept运行时并不总是在屏幕上.如果警报框未关闭,下一个测试用例当然会遇到"超时错误".
如果我sleep 1在click_button和之间使用它总是正常工作...alert.accept,但它不是一个非常好的解决方案.任何的想法?
alert rspec unobtrusive-javascript capybara selenium-webdriver
我已经从Rails 3.2升级到Rails 4.1.12并且我收到了一条错误消息
rake db:drop db:create db:schema:load RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)
错误消息是由Factory Girl导致缺少表的SQL错误.但是为什么工厂女孩应该初始化db:schema:load?
有趣的是,如果我降级到Rails 4.1.11,问题就会消失.
我有一个由 Yii2 GridView 呈现的表格。表头包含按日期排序的链接。如果我单击它,它首先按升序对表格进行排序,然后按降序对第二次单击进行排序。但我想在第一次点击时降序。
我在搜索控制器的搜索方法 (asc->SORT_DESC) 中使用 hack 解决了它:
$dataProvider->sort->attributes['updated_at'] = [
'asc' => [$this->tablename() . '.updated_at' => SORT_DESC ],
'desc' => [$this->tablename() . '.updated_at' => SORT_ASC],
];
Run Code Online (Sandbox Code Playgroud)
有更好的解决方案吗?
我正在使用引导下拉菜单和https://github.com/wilddeer/stickyfill来修复屏幕顶部的一些元素。请参阅jsfiddle。
我无法实现下拉菜单显示在“粘性线”上。我尝试过 z-index 但没有成功。
我没有尝试使用其他粘性插件(makefixed.js,jquery.sticky.js),但结果是相同的。菜单始终位于粘性元素后面。
任何想法?
HTML代码(与jsfiddle相同):
$(function() {
$(".sticky").Stickyfill();
});Run Code Online (Sandbox Code Playgroud)
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://www.diet-health.info/js/stickyfill.js"></script>
<header class="sticky" style="padding:3px;top:0px">
<div class="dropdown btn-group" style="float:right;">
<button id="right-menu" class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">Right Menu</button>
<ul class="dropdown-menu pull-right" aria-labelledby="right-menu">
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a></li>
<li><a href="#">Item 3</a></li>
<li><a href="#">Item 4</a></li>
<li><a href="#">Item 5</a></li>
</ul>
</div>
</header>
<div class="clearfix"></div>
<p>Normal line</p>
<p>Normal line</p>
<p>Normal line</p>
<div class="sticky" style="top:40px">
<p>
********************************************* …Run Code Online (Sandbox Code Playgroud)