0

アプリケーションを Rails 2 から Rails 3 に変換していますが、この小さなコードに関して誰か助けてください。link_toが機能していません。Rails 3.1 で link_to_remoteの代わりに link_to を適切に使用する方法を教えてもらえますか? Rails 2 コード

<%= link_to_remote  package_item.getId(),
                    :url => { :controller => 'cmn/popup',
                              :action     => "show_popup",
                              :frame_url  =>  admin_url( 
                                                :ctrl   => controller,
                                                :app_action => 'package.item.edit',
                                                :id     => package_item.getId().to_s,
                                                :remote => true
                                              ),
                              :frame_width  => '570px',
                              :frame_height => '355px'
                            }
%>

Rails 3.1 コード

<%= link_to package_item.getId(),
            :url => { :controller => 'cmn/popup',
                      :action     => "show_popup",
                      :frame_url  =>  admin_url( 
                                        :ctrl => controller,
                                        :app_action => 'package.item.edit',
                                        :id   => package_item.getId().to_s
                                      ),
                      :frame_width  => '570px',
                      :frame_height => '355px',
                      :remote       => true
                    }
%>

すべての.rjsファイルを.js.erb. これは、Rails 3 で取得している URL です。

<a href="/common/login/en/sentry?url%5Baction%5D=show_popup&amp;url%5Bcontroller%5D=cmn%2Fpopup&amp;url%5Bframe_height%5D=355px&amp;url%5Bframe_url%5D=%2Fcommon%2Flogin%2Fen%2Fsentry%3Fapp_action%3Dpackage.item.edit%26id%3D3%26remote%3Dtrue&amp;url%5Bframe_width%5D=570px&amp;url%5Bremote%5D=true">3</a>

これはRails 2にあります:

<a href="#" onclick="new Ajax.Request('/cmn/popup/show_popup?frame_height=355px&amp;frame_url=%2Fcmn%2Fcmn%2Findex%2F2%3Fapp_action%3Dpackage.item.edit%26amp%3Bbrand%3Dsentry%26amp%3Blanguage%3Den&amp;frame_width=570px', {asynchronous:true, evalScripts:true}); return false;">2</a>

私のコントローラー

    def show_popup
      @content_data = {}
      @content_data.merge!(params)
      render(:template => 'cmn/popup/show_popup', :nolayout => 1)
  end
4

2 に答える 2

3

link_toRails 3 の構文を見てください: http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

すべてのパラメーターは:urlハッシュに含まれていますが、名前を付ける必要はありません。次:urlのようにオプションをハッシュに渡すだけです。

<%= link_to package_item.getId(),
        { 
                  :controller => 'cmn/popup',
                  :action     => "show_popup",
                  :frame_url  =>  admin_url( 
                                    :ctrl => controller,
                                    :app_action => 'package.item.edit',
                                    :id   => package_item.getId().to_s
                                  ),
                  :frame_width  => '570px',
                  :frame_height => '355px'
        },
        :remote       => true
%>

:remoteURLハッシュから抜け出すことを忘れないでください。

これがうまくいくかどうか教えてください。

于 2011-10-15T21:10:39.297 に答える
0

パスを :controller パラメータとして定義する文字列を見たのは初めてです。

つまり、:controller => 'cmn/popup' です。これは私にとって初めてのことで、奇妙に感じます。

これが機能し、リクエストが正しいコントローラーとアクションによって受信されていることを確認してください。

トリッキーだと思うもう 1 つのことは、コントローラーでのレンダリング呼び出しです。電話するだけ

render :layout => false

または、何も呼び出さないでください。

テンプレートがアクションと同じ名前で、コントローラーのような名前のディレクトリに配置されている場合、Rails はレンダリングする必要があるテンプレートと、リクエストの種類に基づいた拡張子 (js/html/xml) を認識します。おそらく render :template => .... html テンプレートのレンダリングを強制します。

:nolayout オプションは無効だと思います。とにかく、リクエストが JavaScript ファイルに対するものである場合、レイアウトはレンダリングされません。

于 2011-10-16T00:28:40.683 に答える