レールを使用してページを作成しようとしています。このページでは、ユーザーはページ内で使用可能なリストから項目を選択することができ、選択したすべての項目を表示できる必要があります。これを行うために、私は次のコントローラとビューを作成しました:レンダリング後のローカル変数の値を保持する
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 [email protected]_ofertados
@itens_ofertados = []
end
@itens_ofertados.push(Item.find(params[:id_item]))
render "new"
end
end
ビューを
<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>
私がいる問題は、私は、ビューの形式のいずれかの送信ボタンでクリックしたとき@itens_ofertadosと@itensの値を失います。私はページを再レンダリングしたり、これらの変数の以前の値を失うことなくページを更新して、それらがページに表示され続けるようにしたい。
答えをありがとう、私は間違って申し訳ありません、私はレールで多くの経験がありません。ブラウザのメモリに保存するには、セッションに保存する必要がありますか、それを行うための別のリソースがありますか? –
Railsのデフォルトのセッションストアがクッキー内にあるため、セッションは正常です。しかし、クッキーは4KBのデータしか保持できず、ネットワークトラフィックに追加されます。これらのデータは、ブラウザのローカルストレージに保存することをお勧めします。これは、ボリュームがはるかに大きく、サーバーに転送されることがないためです。 – Aetherus
詳細については、[ローカルストレージAPI](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage)を参照してください。それはJavascriptです。 – Aetherus