Несмотря на то, что у меня есть вложенный маршрут с определенной областью, мои ресурсы не маршрутизируются должным образом - Rails 3.1 - PullRequest
0 голосов
/ 14 сентября 2011

Это мой маршрут:

scope ":username" do
  resources :feedbacks
end

Поэтому, когда я перехожу к mydomain.com/test/feedbacks/10, он показывает правильный feedback с id=10, который принадлежит username=test.

Но, если я перейду к mydomain.com/test2/feedbacks/10, он покажет мне ту же обратную связь с id=10, которая НЕ относится к username=test2.

Как я могу запретить этому происходить?

Я использую гем Vanity, чтобы дать мне имя пользователя в URL, вот как выглядит этот маршрут:

controller :vanities do 
    match ':vname' => :show, :via => :get, :constraints => {:vname => /[A-Za-z0-9\-\+\@]+/}
  end

Редактировать 1:

То есть, для ясности, когда я иду к mydomain.com/test/feedbacks/10 и /test2/feedbacks/10, он показывает мне то же самое представление для той же самой записи (в этом случае последняя версия будет неправильной, потому что она должна говорить мне, что такой записи не существует, но это не так. Она просто отображает правильную запись для test/feedbacks/10).

Редактировать 2:

Вот журналы обоих запросов:

Правильный запрос

Started GET "/test-3/feedbacks/7" for 127.0.0.1 at 2011-09-14 02:48:15 -0500
  Processing by FeedbacksController#show as HTML
  Parameters: {"username"=>"test-3", "id"=>"7"}
  Feedback Load (0.5ms)  SELECT "feedbacks".* FROM "feedbacks" WHERE "feedbacks"."id" = ? LIMIT 1  [["id", "7"]]
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 3 LIMIT 1
Rendered feedbacks/show.html.erb within layouts/application (36.2ms)
Completed 200 OK in 188ms (Views: 184.3ms | ActiveRecord: 1.8ms)

Неправильный запрос

Started GET "/test2/feedbacks/7" for 127.0.0.1 at 2011-09-14 02:48:28 -0500
  Processing by FeedbacksController#show as HTML
  Parameters: {"username"=>"test2", "id"=>"7"}
  Feedback Load (0.1ms)  SELECT "feedbacks".* FROM "feedbacks" WHERE "feedbacks"."id" = ? LIMIT 1  [["id", "7"]]
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 3 LIMIT 1
Rendered feedbacks/show.html.erb within layouts/application (37.6ms)
Completed 200 OK in 50ms (Views: 47.5ms | ActiveRecord: 1.2ms)

1 Ответ

2 голосов
/ 14 сентября 2011

Ваше шоу должно выглядеть примерно так:

def show
  @user = User.find_by_username(params[:username])

  if @user == current_user
    ...
    render "show"
  else
    flash[:alert] = "Record doesn't exist"
    redirect_to root_path
  end
end

Я позволил себе добавить предложение @ Бенуа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...