【问题标题】:"undefined method `slug'" when trying to save nested route using Friendly_id 5尝试使用 Friendly_id 5 保存嵌套路由时出现“未定义的方法 `slug'”
【发布时间】:2016-09-12 13:34:34
【问题描述】:

我的应用程序允许用户创建活动,人们可以回复活动。该应用程序在添加 Friendly_id gem 之前运行良好,它在创建新事件时运行良好,但 RSVP 不起作用,因为当您单击提交时会出现错误。请查看我的代码,看看我是否缺少任何东西。提前谢谢你。

事件模型

 class Event < ApplicationRecord
 extend FriendlyId
 friendly_id :eventname, use: [:slugged, :finders]
   belongs_to :user


def should_generate_new_friendly_id?
    eventname_changed?
end
   has_attached_file :image, styles: { medium: "300x300>", thumb:   "100x100>" }, default_url: "/images/:style/placeholder.png"
   validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/
   validates :eventname, presence: true
   has_many :rsvps, dependent: :destroy
end'

Rsvp 模型

class Rsvp < ApplicationRecord
    extend FriendlyId
    friendly_id :eventname, use: [:slugged, :finders]
    belongs_to :event
end

事件控制器

class EventsController < ApplicationController
before_filter :authenticate_user!, except: [:show]

def index
    @events = current_user.events.all
end

def show
    @event = Event.friendly.find(params[:id])
end

def new
    @event = current_user.events.build
end

def create
    @event = current_user.events.build(event_params)
    @event.user = current_user
    respond_to do |format|
        if @event.save
            format.html { redirect_to @event, notice: "Successfully created" }
        else
            format.html { render "new" }
        end
    end
end

def edit
    @event = Event.friendly.find(params[:id])
end

def update
    @event = Event.friendly.find(params[:id])
    if @event.update(event_params)
        redirect_to @event
    else
        render 'edit'
    end
end

def destroy
    @event = Event.friendly.find(params[:id])
    @event.destroy

    redirect_to events_path
end

private

 def event_params
  params.require(:event).permit(:eventname, :date, :time, :venue,   :description, :image)
end

end

Rsvp 控制器

class RsvpsController < ApplicationController

def index
    event = Event.friendly.find(params[:event_id])
    @rsvps = event.rsvps
end

def new
    event = Event.friendly.find(params[:event_id])
    @rsvp = event.rsvps.friendly.build
        respond_to do |format|
            format.html
        end
end

def create
    event = Event.friendly.find(params[:event_id])
    @rsvp = event.rsvps.build(rsvp_params)
    respond_to do |format|
        if @rsvp.save
        format.html { redirect_to "/thanks" }
        format.js
        else
        format.html { render :new }
        format.js
        end
    end
end

def thanks
    render params[:page]
end

 private
    def rsvp_params
    params.require(:rsvp).permit(:status, :name, :message)
    end

 end

路线

  resources :events do
   resources :rsvps
  end

显示事件:

http://127.0.0.1:3000/events/birthday

为事件创建 rsvp:

 http://127.0.0.1:3000/events/3/rsvps/new

提交错误后显示:

http://127.0.0.1:3000/events/birthday/rsvps

Screenshot of Error I get

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5 friendly-id nested-resources


    【解决方案1】:

    我设法通过更新以下内容解决了这个问题:

    class Rsvp < ApplicationRecord
       belongs_to :event
    end
    

    改变了这个:

    new_event_rsvp_path(event_id: @event.id)
    

    到这里:

    new_event_rsvp_path(@event)
    

    创建新的 RSVP 现在以 Friendly_id 方式显示:

     http://127.0.0.1:3000/events/birthday/rsvps/new
    

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 2020-08-31
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多