2

私のRailsプロジェクトでは、私のindex見解では、リンクがあります

<%= link_to 'Show all posts', show_all_path %>

にはroutes.rb、次のルートがあります。

match "show_all" => "Posts#show_all"

そのリンクをクリックすると、

http://<domain name>/my_rails_project

http://<domain name>/my_rails_project//show_all

できます。ただし、スラッシュが 2 つあると見栄えがよくありません。スラッシュが 1 つだけ表示されるようにすることはできますか?

編集:これらは私のファイルの一部です:

config/environment.rb

require File.expand_path('../application', __FILE__) 
Blog::Application.initialize!

config/environments/development.rb

Blog::Application.configure do 
  config.cache_classes = false 
  config.whiny_nils = true 
  config.consider_all_requests_local = true 
  config.action_view.debug_rjs = true 
  config.action_controller.perform_caching = false 
  config.action_mailer.raise_delivery_errors = false 
  config.active_support.deprecation = :log 
  config.action_dispatch.best_standards_support = :builtin 
  config.action_controller.asset_host = "//pauls.scripts.asu.edu/blog/public" 
end

config/routes.rb:

Blog::Application.routes.draw 
  do resources :posts match "show_all" => "Posts#show_all" 
end

の出力rake routes

show_all        /show_all(.:format)             {:action=>"show_all", :controller=>"Posts"}
4

7 に答える 7

1

「match」を使用する場合、これは私が使用する構文です。

match "/show_all" => "Posts#show_all"

ただし、そのスラッシュが問題を解決するかどうかはわかりません。試してみる?

乾杯

于 2012-10-18T02:32:29.897 に答える
1

これはレールの問題ではありません。Rails は自分の URL を知りません。リソースの相対 URL のみを認識します。これらの相対 URL は、ドメイン URL に追加されます。不正な URL を生成しないため、エラーは発生しません。

したがって、仮想ホストの問題のように見えます。しかし、正確に何が問題なのかはわかりません。ある時点で、ドメイン URL は www.your_domain/rails_projects/ になります。

www.your_domain を取得するために仮想ホストを更新することで、これを変更できます。

アップデート :

ここに例があります:

<VirtualHost 172.20.30.40>
 DocumentRoot /www/subdomain/sub2
 ServerName www.sub2.domain.tld
 ServerPath /sub2/
 </VirtualHost>

に応答します:

http://www.sub2.domain.tld/sub2/

あなたの問題にかなり似ているようです。

于 2012-10-23T14:01:23.187 に答える
1

サブ uri の下で提供されるようにアプリをどのように設定していますか? それが最も可能性の高い問題です。おそらく、あなたがそれをどのように行っているかを正確に報告してください。これを webrick ではなく、開発モードのサーバーのパッセンジャーで実行していると思われますか?

RailsBaseURI または RAILS_RELATIVE_URL_ROOT の値は何を使用しているかによって異なりますが、末尾にスラッシュが付いていますか? フォルダーのどこかに末尾のスラッシュがないか、apache/passenger 構成を確認してください (仮想ホストのドキュメント ルートも?)。root_url の値も出力して、それが何であるかを確認してください。

ローカルでの簡単なテストとして、新しいプロジェクトを作成し、次のようなルートを使用します (スコープに注意してください)。

ブログ::Application.routes.draw do

scope 'my_rails_project' do
   match '/test',  :to => 'welcome#test'
end

終わり

次に、新しい投稿コントローラーでのテスト アクション:

 def test
    render :text => "ROOT-#{root_url}"
 end

より単純なルートを使用し、セットアップをやり直すことで、何がうまくいかないのかを明らかにするかもしれません.

次に、実際のプロジェクトで、サブ uri を設定する ENV 変数を変更し、仮想ホストの設定を確認し、すべてのルートにスコープを設定するという 2 つのことを試すことができます。

scope 'my_rails_project' do
   match '/show_all'=> "posts#show_all", :as => "show_all"
end

また、show_all_path の出力を調べて、リンクで実際に取得しているものを確認してみます。たとえば、href で「//」を取得していますか?

于 2012-10-19T18:40:05.560 に答える
0

空白のアプリケーションでこれを再現し、すべてのコードをgithubに投稿してみてください。エラーは、別のものである可能性があります。

RailsバージョンとRubyバージョンを教えてください。

于 2012-10-22T18:15:37.883 に答える
0

Railsアプリがサブディレクトリにあることに気づきました。それが関連しているかどうかはわかりませんが、クイック検索でこのガイドが作成され、問題が解決する場合と解決しない場合があります。

于 2012-10-18T13:07:25.657 に答える
0

このようなURLが必要な場合は、http://<domain name>/my_rails_project/show_allこれをroutes.rbに追加してください

resources :posts
match "show_all", :to => "posts#show_all"

次のような URL を使用する場合は、次のようhttp://<domain name>/my_rails_project/posts/show_allに追加します。

resources :posts do
  collection do
    get "show_all"
  end
end

ここで他の例を見ることができます

于 2012-10-19T08:40:03.933 に答える
0

この構文を試しましたか?

match '/show_all'=> "posts#show_all", :as => "show_all"

:as オプションは正しいパスを提供します

<%= link_to 'Show all posts', show_all_path %>

または、default_url_options で URL の末尾に余分なスラッシュを追加することもできます。アクション controller.default_url_options を確認してください

于 2012-10-18T12:04:09.973 に答える