Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中呈现页面后保留局部变量值_Ruby On Rails_Ruby_Model View Controller_Web - Fatal编程技术网

Ruby on rails 在Rails中呈现页面后保留局部变量值

Ruby on rails 在Rails中呈现页面后保留局部变量值,ruby-on-rails,ruby,model-view-controller,web,Ruby On Rails,Ruby,Model View Controller,Web,我正在尝试使用rails创建一个页面。在此页面中,用户可以从页面中可用的列表中选择项目,并且他需要能够查看所选的所有项目。为此,我创建了以下控制器和视图: class PropostasController < ApplicationController def new @id_item = params[:id_item] end def ofertar @itens = Item.where(dono_id: session[:id_usuario])

我正在尝试使用rails创建一个页面。在此页面中,用户可以从页面中可用的列表中选择项目,并且他需要能够查看所选的所有项目。为此,我创建了以下控制器和视图:

class PropostasController < ApplicationController
  def new
    @id_item = params[:id_item]
  end

  def ofertar
    @itens = Item.where(dono_id: session[:id_usuario])
    render "new"
  end

  def adicionar_item
    if !@itens_ofertados
      @itens_ofertados = []
    end
    @itens_ofertados.push(Item.find(params[:id_item]))
    render "new"
  end
end
类建议控制器
看法

Nova Proposta

变现人提议第

通常情况下,我们会接受提议 它有一系列的程序:


奥弗塔多斯酒店
  • “260x180”)%%>

它是一个系列的自交系
  • “260x180”)%%>

我遇到的问题是,当我单击其中一种视图形式的submit按钮时,我丢失了@itens\u of ertados和@itens中的值。我希望重新呈现页面或刷新页面,而不会丢失这些变量的以前值,以便它们继续出现在页面中。

@itens\u of ertados
不是局部变量。它是控制器的一个实例变量

对于每个HTTP请求,Rails实例化一个新的控制器实例来处理该请求。当请求处理完成时,控制器实例死亡。因此,前一个控制器实例变量的值不可访问,因为该控制器实例已不存在


最好的解决方案是将历史记录存储在浏览器的本地存储中。

谢谢您的回答,很抱歉我犯了错误,我对rails没有太多经验。要存储在浏览器的内存中,我需要存储在会话中,还是需要其他资源来存储?会话可以,因为Rails的默认会话存储在cookie中。但是,您应该始终记住,cookie只能保存4KB的数据,它们会增加网络流量。我建议将这些数据存储在浏览器的本地存储器中,因为它的容量要大得多,而且永远不会传输到服务器。有关详细信息,请参阅。这是Javascript。
<h1>Nova Proposta</h1>
<%= @id_item %>
<p>
  Realizar proposta para:
</p>
<div>
  Itens do usuário que receberá a proposta
</div>
<div>
  Itens a serem ofertados:
  <br>
  <%= form_tag("/ofertar_item_proposta") do %>
    <p>
      <%= submit_tag "Ofertar Item" %>
    </p>
  <% end %>

</div>
<div>
<%= render "teste"%>
</div>
<div>
  <br>
  <h2>Itens ofertados</h2>
  <%if @itens_ofertados %>
    <% @itens_ofertados.each do |item| %>
      <ul>
        <li><%= item.nome %></li>
        <li><%= item.descricao %></li>
        <li><%= item.quantidade %></li>
        <li><%= item.categoria.nome %></li>
        <% if item.img_link %>
          <li><%= image_tag(item.img_link, :size => "260x180") %></li>
        <% end %>
      </ul>
    <% end %>
  <% end %>
</div>
<div>
  <br>
  <h2>Itens a serem selecionados</h2>
  <%if @itens %>
    <% @itens.each do |item| %>
      <%= form_tag("/adicionar_item_proposta") do %>
        <ul>
          <li><%= item.nome %></li>
          <li><%= item.descricao %></li>
          <li><%= item.quantidade %></li>
          <li><%= item.categoria.nome %></li>
          <% if item.img_link %>
            <li><%= image_tag(item.img_link, :size => "260x180") %></li>
          <% end %>
        </ul>
        <ul>
          <%= hidden_field_tag 'id_item', item.id %>
          <li><%= submit_tag 'Adicionar a Proposta' %></li>
        </ul>
      <% end %>
    <% end %>
  <% end %>
</div>