Почему помощник шоу не ведет к show.html.erb, а к index.html.erb? - PullRequest
1 голос
/ 11 июля 2019

Вот мой код, который вызывает проблемы:

  <% @user.goals.each do |goal| %>
    <tr>
      <td><%= link_to goal.text, user_goals_path(@user, goal)%></td>
    </tr>
  <% end %>

Я думал, что user_goals_path (@user, @goal) был правильным, но, очевидно, он продолжает идти к index.html.erb.

Мое шоу и индекс в контроллере:

    def index
        @user = User.find(params[:user_id])
        @goal = @user.goals
    end

    def show
        @user = User.find(params[:user_id])
        @goal = @user.goals.find(params[:id])
    end

Любая помощь будет высоко ценится.

UPDATE:

Спасибо за комментарии. Вот мой маршрут:

               user_goals GET    /user/:user_id/goals(.:format)                                                           goals#index
                          POST   /user/:user_id/goals(.:format)                                                           goals#create
            new_user_goal GET    /user/:user_id/goals/new(.:format)                                                       goals#new
           edit_user_goal GET    /user/:user_id/goals/:id/edit(.:format)                                                  goals#edit
                user_goal GET    /user/:user_id/goals/:id(.:format)                                                       goals#show
                          PATCH  /user/:user_id/goals/:id(.:format)                                                       goals#update
                          PUT    /user/:user_id/goals/:id(.:format)                                                       goals#update
                          DELETE /user/:user_id/goals/:id(.:format)                                                       goals#destroy

И route.rb:

Rails.application.routes.draw do
  devise_for :users

  resources :user do
    resources :goals
  end

  devise_scope :user do
    authenticated :user do
      root 'home#index', as: :authenticated_root
    end

    unauthenticated do
      root 'devise/sessions#new', as: :unauthenticated_root
    end
  end
end

Как упоминалось в комментарии, user_goal_path (@user, goal) генерирует ошибку в списке целей:

No route matches {:action=>"show", :controller=>"goals", :id=>nil, :user_id=>"1"}, missing required keys: [:id]

ОБНОВЛЕНИЕ 2:

Может ли это быть проблемой? Вот моя схема. Видите ли вы что-то не так, согласно моей цели, чтобы показать цель?

  create_table "goals", force: :cascade do |t|
    t.text "text"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.bigint "user_id"
    t.index ["user_id"], name: "index_goals_on_user_id"
  end

Ответы [ 3 ]

0 голосов
/ 12 июля 2019

Для этих маршрутов требуется только user_id параметр передачи динамически

           user_goals GET    /user/:user_id/goals(.:format)     goals#index

Таким образом, это будет

<td><%= link_to goal.text, user_goals_path(@user)%></td>
<td><%#= link_to goal.text, user_goals_path(@current_user)%></td>

Для маршрутов требуется user_id и id параметрпроходить динамически

            user_goal GET    /user/:user_id/goals/:id(.:format)     goals#show

Так было бы

<td><%= link_to goal.text, user_goal_path(@user, @goal)%></td>
<td><%#= link_to goal.text, user_goal_path(@current_user, @goal)%></td>
0 голосов
/ 13 июля 2019

После того, как я попробовал мелкие вложенные ресурсы, я мог перейти от списка к странице показа с помощью этого:

  <% @user.goals.each do |goal| %>
    <tr>
      <td><%= link_to goal.text, goal_path(@user,goal)%></td>
    </tr>
  <% end %>
0 голосов
/ 11 июля 2019

user_goals_path(@user, goal) похоже на автоматически сгенерированный маршрут к действию: index.

Если бы это было в действии: show, то, скорее всего, вместо этого было бы user_goal_path(@user, goal), чтобы показать цель пользователя.

Как сказал Лукас К, размещение вывода rake routes может помочь сдальнейшая диагностика.

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