Rails:如何基于属性过滤渲染部分结果?

时间:2016-03-08 20:24:44

标签: ruby-on-rails

这是一个非常基本的问题,但是,我无法在任何文档中找到简单的答案。

用例:

  • 仅使用type_micro =" business"

  • 呈现Micropost
  • 我可以在index.html.erb中传递此条件,其中调用partial以使其成为一个简单的实现吗?

当前代码:

1)microposts/index.html.erb

<%= render @microposts %>
{{how can I pass type_micro = "business" right here?}}

2)microposts table

 id         | integer                     | not null default 
 title      | text                        |
 body       | text                        |
 user_id    | integer                     |
 created_at | timestamp without time zone | not null
 updated_at | timestamp without time zone | not null
 type_micro | character varying

3)_micropost.html.erb

<span>
     <p class="title-post"><%= link_to micropost.title, micropost_path) %> </p> </span>

4)Micropost Controller

 def index

    @microposts = Micropost.paginate(page: params[:page])
     @micropost = @micropost.find(params[:type_micro])
  end

  def show
      @micropost = Micropost.find(params[:id])
      @micropost = @micropost.find(params[:type_micro])

       respond_to do |format|
          format.html # show.html.erb
          format.json { render json: @micropost }
        end
  end

更新:我想传递type_micro,以便我可以将&#34; business&#34;,&#34; management&#34;,&#34; social&#34;我认为分为三个部分。我通过谷歌查找解决方案,因为没有关于这个简单的事情的文档。什么都没有用,尝试了这里推荐的东西。这是代码现在的位置:

控制器: def index

@microposts = Micropost.paginate(page: params[:page]

def show       @micropost = Micropost.find(params [:id])

无法添加@micropost = @ micropost.find(params [:type_micro]),因为我收到错误,查找未定义。不知道为什么。

Index.html.erb

  

上述内容并未显示所有&#34; business&#34;的微博。它什么都不过滤。

2 个答案:

答案 0 :(得分:0)

为什么需要将type_micro = "business"传递给部分。从您的控制器代码看,您似乎已经根据params[:type_micro]过滤了“商家”类型的微博?

尽管如此,视图(包括部分视图)可以访问params。所以你直接在部分中调用params[:type_micro]。或者您也可以在部分中设置@type_micro = params [:type_micro] in your controller's action and acceess @ type_micro`。

最后一种情况是,如果您确实需要将{business}作为type_micro传递给您的部分内容,原因是其他原因,您可以尝试使用<%= render @microposts, locals: { type_micro: "business" } %>type_micro可以访问$('form#formID').submit(function(e){ var emptyinputs = $(this).find('select').filter(function(){ return !$.trim(this.value).length; }).prop('disabled',true); var emptyinputs = $(this).find('input').filter(function(){ return !$.trim(this.value).length; }).prop('disabled',true); }); 部分中的局部变量,其值为“business”。

有关详细信息,请参阅PartialRenderer

答案 1 :(得分:0)

ectform

然后在您的部分内容中,您可以在部分HTML

中调用<%= render @microposts, type_micro: "business" %>