我想向我的控制器添加另一个动作,我无法弄清楚如何.
我在RailsCasts和大多数StackOverflow主题上发现了这个:
# routes.rb
resources :items, :collection => {:schedule => :post, :save_scheduling => :put}
# items_controller.rb
...
def schedule
end
def save_scheduling
end
# items index view:
<%= link_to 'Schedule', schedule_item_path(item) %>
Run Code Online (Sandbox Code Playgroud)
但它给了我错误:
undefined method `schedule_item_path' for #<#<Class:0x6287b50>:0x62730c0>
Run Code Online (Sandbox Code Playgroud)
不确定我应该从哪里开始.
我正在学习用黄瓜+水豚测试.
在一个视频教程中,我发现这样的东西应该有效:
...
When I go to the homepage
Then /do stuff/
Run Code Online (Sandbox Code Playgroud)
我试图这样做,但黄瓜将"主页"这个词视为正则表达式的一部分.
所以它给了我建议这样的声明的建议
When /^I go to homepage$/ do
#tasks
end
Run Code Online (Sandbox Code Playgroud)
试过"索引页","项目页面"(现有控制器的名称),"根路径" - 同样的事情.黄瓜实际上并没有去那里 - 只是要求创建一个处理程序.
我从哪里开始?
是否可以使用 rails 进行这样的查询?
SELECT items.*, (select count(*) from ads where item_id = items.id) as adscount WHERE 1
Run Code Online (Sandbox Code Playgroud)
然后像这样访问这个字段?
@item.adscount
Run Code Online (Sandbox Code Playgroud)
例如,每个项目都有一百个左右的广告。在项目索引视图中,我需要显示每个项目有多少个广告。
目前我只知道如何对每个项目进行唯一查询,例如:
select count(*) from ads where item_id = 1
select count(*) from ads where item_id = 2
select count(*) from ads where item_id = 3
etc
Run Code Online (Sandbox Code Playgroud)
编辑:
做了一个计数器缓存列。
这给了我巨大的性能提升。
我该怎么办?
if params[:property] == nil
@item.property = true
else
@item.property = false
Run Code Online (Sandbox Code Playgroud)
总是忘记在一行中编写它的正确语法.
在PHP中它将是这样的:
@item.property=(params[:property]==nil)true:false
Run Code Online (Sandbox Code Playgroud)
在铁轨中是否相同?
我需要做这样的事情:
if @item.exists?(:cron => "mycron")
# redirect to item page
else
# create new @item
end
Run Code Online (Sandbox Code Playgroud)
在Rails中有更简单的方法吗?
也许是这样的:
@item.create_if_not_exists(:cron => "mycron")
Run Code Online (Sandbox Code Playgroud)