Вот мой код, который вызывает проблемы:
<% @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