我有一个has_many through连接表设置为配方应用程序在哪里Ingredient和Meal连接MealIngredient.在MealIngredient,我有meal_id,ingredient_id和amount.我的问题是:我如何访问该amount列?
在我的食谱视图中,我遍历了各种成分:
@meal.ingredients.each do |i|
Run Code Online (Sandbox Code Playgroud)
我可以访问成分的属性,但不能访问MealIngredient连接记录中的金额.
我尝试includes在查询中使用@meal.ingredients.includes(:meal_ingredients),但我不确定如何访问amount前面提到的循环.当我使用时i.inspect,我根本看不到任何对该meal_ingredients表的引用.
是否有某种方法可以使用该循环访问变量i.amount?
预先感谢您的任何帮助!
我需要在Ruby on Rails应用程序中循环几个月.对于每个月,我需要找到该月的第一天和最后一天.然后在单独的查询中使用这些日期来查找在这些日期期间发生的事件并对它们运行计算.
最初,我尝试过类似的东西:
(11.months.ago.to_date.month..Date.today.month).each do |m|
start_date = '01-#{m}-#{Date.today.year}'.to_date.beginning_of_month
end_date = '01-#{m}-#{Date.today.year}'.to_date.end_of_month
end
Run Code Online (Sandbox Code Playgroud)
当然,在这种情况下,如果11个月之前涉及回到上一年,那么这一年就不会更新.而且,我认为这种for/each循环不起作用.我也尝试将数字映射到数组并使用相同的方法,但收到错误.
完成这样的事情的最佳方法是什么?
我有两个DIV:一个DIV根据浏览器动态改变大小(响应式设计),我希望其他DIV根据第一个DIV的高度修改它的高度.我认为最简单的方法是使用JQuery动态更改高度.
我尝试了以下方法:
$('section#div2').css({height:$(this).css('height').replace($('section#div1 div.div1_container').height()+'px')});
Run Code Online (Sandbox Code Playgroud)
但是,该代码无效.其他各种版本也不起作用.
我的问题是:如何在不更改给定元素的所有属性的情况下替换单个CSS属性?
编辑:这是动态的第一个DIV编码的方式......
首先是第一个DIV的容器:
position: relative;
padding-bottom: 50%;
padding-top: 30px; height: 0; overflow: hidden;
margin:0 0.7em 0 0.7em;
Run Code Online (Sandbox Code Playgroud)
然后,该容器内的内部对象(可能不相关):
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
Run Code Online (Sandbox Code Playgroud) 我有一个基于Rails 4文档的简单控制器测试(使用Test :: Unit):
test "should create user" do
assert_difference('User.count') do
post :create, user: users(:sample_user)
end
assert_redirected_to user_path(assigns(:user))
end
Run Code Online (Sandbox Code Playgroud)
而且,尽管实际用户被创建得很好,但测试失败了,他说:
1)错误:UsersControllerTest #test_should_create_user:NoMethodError:未定义方法
permit' for "832959492":String app/controllers/users_controller.rb:23:inuser_params'app/controllers/users_controller.rb:8:create' test/controllers/users_controller_test.rb:11:in在'test/controllers/users_controller_test.rb中的块(2级)中:10:在`block in'中
出于某种原因,测试无法识别新的Rails 4 permit方法.现在,我user_params在控制器中有一个私有方法.但是,我尝试将其移动到实际create操作并收到相同的错误.用户创建也是100%标准(完全没有任何疯狂 - 就像Rails文档一样).
有谁知道如何重写或以其他方式使这个测试通过?
我有一个应用程序,用户可以在其中创建项目。该currentProject模型中的一个是Maybe Project与初始值设置为类型Nothing(因为可能不存在该用户尚未创建项目)。
type alias Project =
{ name : String }
type alias Model =
{ user : User
, currentProject : Maybe Project
}
Run Code Online (Sandbox Code Playgroud)
这是在init模型中:
currentProject = Nothing
然后我有一个下拉菜单,用户可以在其中选择一个项目。选择它后会onClick调用以下更新:
type Msg
= ...
| SetProject Project
Run Code Online (Sandbox Code Playgroud)
我尝试运行的更新功能如下所示:
SetProject project ->
case project of
Just project ->
( { model | currentProject = project }, Cmd.none )
Nothing ->
( model, Cmd.none )
Run Code Online (Sandbox Code Playgroud)
我收到错误,因为project是类型Project而不是Maybe Project …
如果我有多态关联,如何在视图中访问相关方法?
例如,假设模型关联是:
class Order < ActiveRecord::Base
belongs_to :orderable, :polymorphic => true
end
class Product < ActiveRecord::Base
has_many :orders, :as => :orderable
end
Run Code Online (Sandbox Code Playgroud)
并且,在Order视图中,我尝试使用:
<%= @order.product.id %>
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.那你如何访问视图中的相关模型呢?
编辑:这是我正在使用的表格:
<% form_for [@orderable, @order] do |f| %>
...
<% end %>
Run Code Online (Sandbox Code Playgroud)
然后,我将它包含在Product Show视图中,如下所示:
<%= render 'orders/form' %>
Run Code Online (Sandbox Code Playgroud) 我试图通过模型方法构建一个看起来像这样的数组:
[['3/25/13', 2], ['3/26/13', 1], ['3/27/13', 2]]
其中,日期是字符串,后面的数字count是表/对象.
我现在有以下模型方法:
def self.weekly_count_array
counts = count(group: "date(#{table_name}.created_at)", conditions: { created_at: 1.month.ago.to_date..Date.today }, order: "date(#{table_name}.created_at) DESC")
(1.week.ago.to_date).upto(Date.today) do |x|
counts[x.to_s] ||= 0
end
counts.sort
end
Run Code Online (Sandbox Code Playgroud)
但是,它不会准确返回计数(所有值都为零).似乎有一些类似的问题,我已经检查过,但似乎也无法使它们工作.
有人可以提供帮助(1)让我知道这是否是最好的方法,(2)就上述代码可能出现的问题提供一些指导,如果有的话?谢谢!