如何从控制器传递不同的参数?

时间:2015-05-24 05:03:57

标签: ruby-on-rails json

我有3个模型作为类别,帖子和评论。我想在类别页面中显示帖子和评论数量。

Sub Sample() Dim lastRow As Long, i As Long Dim CopyRange As Range Dim rw As Range Dim rw1 As Range Dim rw2 As Range Dim rw3 As Range Dim des As Range Dim des1 As Range Dim des2 As Range Dim des3 As Range '~~> Change Sheet1 to relevant sheet name With Sheets(1) lastRow = .Range("A" & .Rows.Count).End(xlUp).Row For i = 2 To lastRow If Len(Trim(.Range("A" & i).Value)) <> 0 Then If CopyRange Is Nothing Then Set CopyRange = .Rows(i) Else Set CopyRange = Union(CopyRange, .Rows(i)) Set rw = Range("P2") Set rw1 = Range("W2") Set rw2 = Range("C2") Set rw3 = Range("R2") End If End If Next If Not CopyRange Is Nothing Then Set des = Sheets(3).Range("P2") Set des1 = Sheets(3).Range("R2") Set des2 = Sheets(3).Range("T2") Set des3 = Sheets(3).Range("U2") '~~> Change Sheet2 to relevant sheet name rw.Copy des rw1.Copy des1 rw2.Copy des2 rw3.Copy des3 Application.CutCopyMode = False End If End With End Sub 将返回评论数量。

但是我应该如何从类别控制器传递这些参数?我也尝试编写相同的jbuilder视图。

或者我可以直接从jbuilder视图中执行此类操作吗?

&#13;
&#13;
category.(:id)Post.(:id).comments.count
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

将参数从控制器传递到您将要呈现的视图的最简单方法是使用@(实例变量)。因此你可以通过:

@count = <your code above>
@all_posts = <your post code>

如果你有很多不同的参数,只需创建一个对象来传递它们:

@post_info = {
      count: <your code above>,
      all_posts: <your post code>
}

然后使用@post_info [:count]和@post_info [:all_posts]

在视图中检索它们

答案 1 :(得分:1)

json.number @category.posts.count它有效但是 json.number @category.posts.comments.count这不是。

您可以在rails控制台中进行测试..例如@category.posts.comments.count。 它可能会抛出像
的错误 NoMethodError: undefined method 'comments' for #<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Post:0x0000000920b058>

这是因为@category.posts返回的集合不是Post对象。

一种可能的解决方案是 @category.posts.map {|post| [post, post.comments.count] } 这将为您提供数组中每个帖子的评论总数。这可能不是您想要的,但您可以修改以满足您的要求。