2

ここで困惑しているのは、私たちのWebサイトにFAQがあり、管理者側では、FAQカテゴリとそれらのカテゴリ内の個々のFAQを追加/編集/削除する機能があります。

私のfaq_controllerには、次の2つのメソッドがあります。

def destroy
  faq = load_faq_for_faq_category
  faq.destroy if faq
  redirect_to "/faq_categories/#{params[:faq_category_id]}"
end

private

def load_faq_for_faq_category
  faq = Faq.where(:id => params[:id]).first!

  if faq.faq_category_id != params[:faq_category_id].to_i
    raise ActiveRecord::RecordNotFound, "FAQ doesn't belong to specified FAQ Category"
  end
  faq
end

この行:

redirect_to "/faq_categories/#{params[:faq_category_id]}"

以前は:

redirect_to :back

しかし、それはうまくいきませんでした。より明示的なパスに切り替えましたが、何をしても、よくある質問は破棄されません。

私のサーバーログには次のように書かれています。

Started DELETE "/faq_categories/4/faq/50" at 2012-12-19 15:44:32 +0000
Processing by FaqController#destroy as HTML
Parameters: {"faq_category_id"=>"4", "id"=>"50"}
Redirected to http://my_staging_server/faq_categories/4/faq/50
Filter chain halted as :redirect_to_https rendered or redirected
Completed 302 Found in 1ms (ActiveRecord: 0.0ms)

しかし、これについて最も奇妙なことは、それが私のローカルマシンで動作することです。私のローカルログは次のようになります。

Started DELETE "/faq_categories/1/faq/5" for 127.0.0.1 at 2012-12-19 09:03:05 -0700
Processing by FaqController#destroy as HTML
Parameters: {"faq_category_id"=>"1", "id"=>"5"}
User Load (0.2ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
Role Exists (0.1ms)  SELECT 1 AS one FROM `roles` INNER JOIN `roles_users` ON `roles`.`id` = `roles_users`.`role_id` WHERE `roles_users`.`user_id` = 1 AND `roles`.`lookup_code` = 'root' LIMIT 1
Faq Load (0.1ms)  SELECT `faqs`.* FROM `faqs` WHERE `faqs`.`id` = 5 LIMIT 1
(0.2ms)  BEGIN
CACHE (0.0ms)  SELECT `faqs`.* FROM `faqs` WHERE `faqs`.`id` = 5 LIMIT 1
SQL (0.2ms)  DELETE FROM `faqs` WHERE `faqs`.`id` = 5
SQL (0.3ms)  UPDATE `faqs` SET position = (position - 1) WHERE (`faq_category_id` = 1 AND position > 1)
(45.1ms)  COMMIT
Redirected to http://localhost:3000/faq_categories/1
Completed 302 Found in 54ms (ActiveRecord: 46.3ms)

どちらが正しいので...

TL:DRredirect_toこれがステージングサーバーで機能しないのはなぜですか。また、このfilter chain halted as :redirect_to_https行は正確にはどういう意味ですか?

4

2 に答える 2

1

本番構成ファイルにHTTPSを設定しているが、開発構成ファイルには設定していない可能性があります。

コントローラの名前がfaq_categoriesで、メソッドの名前がshowだとします。

あなたはそれを行うことができます:

class faq_categories_Controller
    skip_filter :redirect_to_https
end

これにより、HTTPSチェックが妨げられます

または、次の方法で実行できます。

redirect_to {:protocol => 'https://', :controller => 'faq_categories', :action => 'show'}
于 2012-12-19T18:06:25.620 に答える
0

このサイトはすでにhttpsを使用していたので、フィルターチェーンが壊れている理由はまだわかりませんが、@code4jが正しい方向に進んでくれました。

これを私のfaq_controllerに追加すると、問題が修正されました。

skip_filter :redirect_to_https
于 2012-12-19T18:39:40.453 に答える