【发布时间】:2019-10-03 04:43:37
【问题描述】:
我在我的活动展示页面中添加了“兴趣”按钮,该页面有两个视图:显示为 1) 如果用户在兴趣列表中没有该事件,则为“兴趣” 2) 如果用户已将事件添加到兴趣列表,则“删除兴趣”
但是,添加到兴趣列表的活动显示页面出现错误。 “删除兴趣”按钮/链接会导致以下错误。
这是错误信息
ActionView::Template::Error (没有路由匹配 {:action=>"destroy", :controller=>"interests", :id=>nil},可能的不匹配约束: [:id]):
从我的检查来看,这可能是因为兴趣的 ID 没有传递到 interest_path,虽然我已经有了它......
观点
<div class="int-btn">
<% if user_signed_in? && current_user.interested_events.include?(@event) %>
<%= link_to interest_path(@interest), method: :delete, data: { confirm: "You have removed this event from your interest list" } do %>
<div class = "btn btn-main m-2">Remove Interest</div>
<% end %>
<% else %>
<%= link_to event_interests_path(@event), method: :post, data: { confirm: "You have add this event in your interest list" } do %>
<div class = "btn btn-main m-2">Interested</div>
<% end %>
<% end %>
</div>
架构
create_table "interests", force: :cascade do |t|
t.bigint "user_id"
t.bigint "event_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["event_id"], name: "index_interests_on_event_id"
t.index ["user_id"], name: "index_interests_on_user_id"
end
路线
Rails.application.routes.draw do
devise_for :users, controllers: { registrations: 'users/registrations' }
root to: 'pages#home'
resources :events do
resources :interests, only:[:create]
resources :reviews, only:[:create]
end
resources :plans, except:[:destroy] do
resources :event_plans, only:[:create]
end
resources :reviews, only:[:destroy]
resources :interests, only:[:destroy]
get 'events/tagged', to: "events#tagged", as: :tagged
end
控制器
class InterestsController < ApplicationController
def create
@event = Event.find(params[:event_id])
@interest = Interest.new(interest_params)
@interest.user = current_user
@interest.event = @event
authorize @interest
if @interest.save
redirect_to event_path(@event)
else
render 'events/show', event: @event
end
end
def destroy
@interest = Interest.find(params[:id])
authorize @interest
# @event.user = current_user
@event = @interest.event
@interest.destroy
redirect_to event_path(@event)
end
private
def interest_params
params.require(:interest).permit(:user_id, :event_id)
end
end
型号
class Interest < ApplicationRecord
belongs_to :user
belongs_to :event
end
如果您有任何其他问题或需要更多信息,请告诉我。
感谢您的所有帮助!
【问题讨论】:
-
您是否应该在您的资源中为
events:interests执行销毁操作? -
你应该尝试@interest.id 而不是传递整个对象
-
@interest是什么? -
所以,这就是@gn2463 的问题。
@interest不能为 nil,它必须是一个 Interest 对象。 -
那么这意味着您的@interest 没有正确启动,您应该修复它。不要以 new 启动它必须是数据库持久对象。
标签: ruby-on-rails ruby ruby-on-rails-5