繁体   English   中英

为什么show helper不能导致show.html.erb而是index.html.erb?

[英]Why is show helper not leading to show.html.erb but to index.html.erb?

这是引起麻烦的代码:

  <% @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

任何帮助将非常感激。

更新:

谢谢你的意见。 这是我的路线:

               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,目标)在目标列表中生成错误:

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

user_goals_path(@user, goal)似乎是自动生成的:index动作的路由。

如果是:show动作,则可能是user_goal_path(@user, goal)来显示用户目标。

就像Lucas K所说的那样,发布您的rake routes输出可以帮助进一步诊断。

对于此路由,仅需要动态传递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_idid参数动态传递

            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>

在尝试了浅层嵌套资源之后,我可以使用以下方法从列表移至显示页面:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM