在部分渲染中排序是否可能?

时间:2017-06-20 11:15:09

标签: ruby-on-rails ruby

我正在RoR中做一个项目,我得到了一个观点,我想知道我是否可以进行部分渲染然后按顺序,是一个表,我以不同的方式使用,但包含相同的数据,这将改变订单的数据顺序。 我想做这样的事情:

    <%= render partial: "produto", order_by :preco%>
    <%= render partial: "produto", order_by :quantidade%>

这是部分:

    <% @produtos.each do |produto| %>
          <tr>
             <td>
                <%= produto.nome %>
             </td>
             <td>
                <%= produto.descricao %>
             </td>
             <td>
                <%= produto.preco %>
             </td>
             <td>
                 <%= produto.quantidade %>
             </td>
             <td>
                <%= button_to "Remover", produto, method: :delete, class: "btn btn-danger", 
                                          data:{confirm: "Tem certeza que deseja remover?"} %>
             </td>
           </tr>
     <% end %>

控制器:

def index
        #@produtos_por_nome = Produto.order :nome
        #@produtos_por_preco = Produto.order :preco
        #com limite
        #@produtos_por_nome = Produto.order (:nome).limit 5
    end
    def new
        @produto = Produto.new
    end
    def create
        valores = params.require(:produto).permit :nome, :preco, :descricao, :quantidade
        @produto = Produto.new valores
        if @produto.save
            flash[:notice] = "Produto salvo com sucesso"
             redirect_to root_url
         else
            render :new
        end

    end
    def destroy
        id=params[:id]
        Produto.destroy id
        redirect_to root_url
    end
    def busca
        nome_a_buscar = "%#{params[:nome]}"
        @produtos = Produto.where "nome like ?", nome_a_buscar


    end

4 个答案:

答案 0 :(得分:0)

您可以将参数传递给部分

<%= render "produto", obj: @produtos.order(:preco)%>
<%= render "produto", obj: @produtos.order(:quantidade)%>

在你的部分_produto.html.erb

<% obj.each do |produto| %>
    ...
<% end %>

答案 1 :(得分:0)

尝试使用以下格式:

<%= render partial: "produto", :locals => {:preco_data => @produtos_por_nome.order(:preco)} %>

在您的produto部分模板中,您可以访问

<%= preco_data.each do |data| %>
    <tr>
             <td>
                <%= produto.nome %>
             </td>
             <td>
                <%= produto.descricao %>
             </td>
             <td>
                <%= produto.preco %>
             </td>
             <td>
                 <%= produto.quantidade %>
             </td>
             <td>
                <%= button_to "Remover", produto, method: :delete, class: "btn btn-danger", 
                                          data:{confirm: "Tem certeza que deseja remover?"} %>
             </td>
           </tr>
<% end %>

答案 2 :(得分:0)

You can pass the option as a local variable.

<%= render partial: "produto", locals: {order_by: :preco} %>
<%= render partial: "produto", locals: {order_by: :quantidade }%>

And then use it in the partial.

<% @produtos.order(order_by).each do |produto| %>

If you absolutely can't change the partial, you can change the instance variable before you call the partial. So the part of the code where you want ordre preco you would do...

<% @produtos = Produto.order(:nome) %>
<%= render partial: "produto" %>

You may want to combine the above into a helper method.

答案 3 :(得分:0)

我能够解决.. 在我的部分,我删除了每个变得如此...

<tr>
                         <td>
                            <%= produto.nome %>
                         </td>
                         <td>
                            <%= produto.descricao %>
                         </td>
                         <td>
                            <%= produto.preco %>
                         </td>
                         <td>
                            <%= produto.quantidade %>
                         </td>
                         <td>
                         <%= button_to "Remover", produto, method: :delete,
                                                          class: "btn btn-danger",  
                                                          data:{confirm: 
                                                          "Tem certeza que deseja remover?"
                                                            } %>
                             </td>
</tr>

我打电话:

<thead>
      <tr>
              <th>Nome</th>
              <th>Descrição</th>
              <th>Preço</th>
              <th>Quantidade</th>
              <th>Remover</th>
        </tr>
    </thead>
    <tbody>

    <%= render partial: "produto",  collection: @produtos_por_preco%>

     </tbody>
</table>
<table class="table table-bordered">
  <thead>
  <tr>
              <th>Nome</th>
              <th>Descrição</th>
              <th>Preço</th>
              <th>Quantidade</th>
              <th>Remover</th>
        </tr>
<tbody>

          <%= render partial: "produto",  collection: @produtos_por_quantidade%>    

    </tbody>

控制器:

def index

        @produtos_por_preco = Produto.order :preco
        @produtos_por_quantidade = Produto.order :quantidade
        #com limite
        #@produtos_por_nome = Produto.order (:nome).limit 5
    end