0

アプリケーション全体で使用する通貨のウィジェットがあります。すなわち。ユーザーは、通貨を EUR -> USD から、または約 13 の他の通貨に変更します。日付など、他にもいくつかのユースケースがありますが、これが最も簡単に説明できます。通貨は基本的に、通貨コントローラーを呼び出してセッション変数を更新し、JS を使用してページをリロードしますが、ページの特定の要素 (つまり、通貨の変更を反映し、他には何も反映しない) のみを取得したいと思います...

$("#places_list").html("<%= escape_javascript(render :partial => 'places/list') %>");

または別のコントローラーの場合

$("#locations").html("<%= escape_javascript(render :partial => 'locations/places') %>");

ただし、これらの要素は現在のコントローラーに固有のものです。つまり、リストなどのコントローラー固有のパーシャルをレンダリングします... (通貨の計算自体はアプリケーションヘルパーにあるため、新しいロジックは行われません)。通貨コントローラーは単純です。異なるコントローラーによってロードされたパーシャル。(場所、場所など)

この目的のために特定のすべてのコントローラーでアクションを作成する以外に、現在のコントローラーに固有の要素をレンダリングできるように動作させるにはどうすればよいですか? すなわち。現在のコントローラーを通貨に渡すことができます

<%= hidden_field_tag :info, controller.controller_name %>

それが理にかなっているのかどうかはわかりませんが、他の人の脳ではなくても、少なくとも自分の脳ではそうであることを願っています.

4

1 に答える 1

0

私は小さなアプリを試してみましたが、以下はあなたのための1つの解決策です.

まず第一に、私の場合、私がやろうとしているのは、各モデルに :info という属性を持たせて、ビューで (<%= f.text_field :info %>) と呼べるようにすることです (注意してください) f はモデルの任意のインスタンスにすることができます)

そのためには、各モデルに :info 属性を追加する必要があります。いくつかの方法があります

1 - クラスを作成します (AR::Base から継承し、指定されたクラスから他のすべてのモデルを継承します) (ただし、いくつかのコード変更が必要です)

2 - :info 属性を AR::Base クラスに注入するのが手っ取り早くて醜い方法です (これは私が行いました ;) )

config/initializers にファイルを作成し、curreny.rb と言って、このコードを追加します。

module ActiveRecord
 class Base
   attr_accessor :info
 end
end 

その後、AR を使用する任意のビューから、:info 属性を持ちます

例: ユーザー/新規

新しいユーザー

<% form_for(@user) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label :info %><br />
    <%= f.text_field :info %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

<%= link_to 'Back', users_path %>

注意:これはあまり良い解決策ではありませんが、これで考え始めることができると思います

乾杯

同時代

于 2010-10-05T21:19:24.930 に答える