【问题标题】:Couldn't find Course without an ID找不到没有 ID 的课程
【发布时间】:2019-09-10 07:50:42
【问题描述】:

当我尝试访问 app/views/companies/courses/show.html.erb(在 app/views/companies/courses/new.html.erb 之后重定向)时,rails 服务器说它找不到课程没有身份证。

另外,当我在 rails 控制台上运行 Course.all 时,课程具有正确的 ID、正确的描述和正确的公司 ID,但没有名称属性。

应用程序/控制器/公司/课程控制器:

class Companies::CoursesController < ApplicationController
  before_action :authenticate_company!

  def new
    @course = Course.new
  end

  def create
    @course = current_company.courses.create(course_params)
    if @course.save
      redirect_to companycourse_path(:course => @course.id)
    else
      render 'new'
    end
  end

  def show
    @course = current_company.courses.find(params[:id])
  end

  def index
    @courses = current_company.courses.all
  end

  private

  def course_params
    params.require(:course).permit(:title, :description)
  end
end

App/models/course.rb:

class Course < ApplicationRecord
  belongs_to :company
end

App/models/company.rb:

class Company < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  has_many :courses
end

配置/路由.rb:

Rails.application.routes.draw do
  devise_for :companies
  devise_for :users
  root 'static_pages#home'
  get 'users/:id' => 'users#show'
  resources :users, only: [:show]
  get 'companies/:id' => 'companies#show'
  resources :companies, only: [:show] do
    resources :courses, only: [:show,:new,:create,:index]
  end

  devise_scope :user do
    get 'signup', to: 'users/registrations#new'
    get 'login', to: 'users/sessions#new'
  end

  devise_scope :company do
    get 'companysignup', to: 'companies/registrations#new'
    get 'companylogin', to: 'companies/sessions#new'
    get 'newcourse', to:'companies/courses#new'
    post 'newcourse', to:'companies/courses#create'
    get 'companycourse', to:'companies/courses#show'
    get 'companycoursesindex', to:'companies/courses#index'
  end

end

【问题讨论】:

  • 你在传递一个id吗?
  • 是的,我在从 new 重定向到 show 时传递了一个 id:
  • redirect_to companycourse_path(:course => @course.id)
  • @iceman,我尝试了你的建议,现在我在另一行出现了同样的错误:
  • @course = current_company.courses.find(params[:id])

标签: ruby-on-rails


【解决方案1】:

不久前我在构建我的应用程序时遇到了类似的问题,我的问题来自控制器。

在您的 routes.rb 中,我将添加 resources :companies, :has_many =&gt; :courses。我还将在 models/course.rb 中为您的课程模型添加验证,以确保当您将其保存到数据库时,您的对象有一个标题:@987654322 @

也可以尝试在你的 courses_controller.rb 中使用这个或类似的东西,而不是你当前的代码:

    def create
     @company = find_company
     @course = Course.new(course_params)
     @course.company_id = current_company.id
    if @course.save
     your conditions here
    else
     your conditiona here
    end
   end 

   private
    def find_company
     params.each do |name, value|
      if name == 'company_id'
        return @company = Company.find(value.to_i)
      end
     end
    nil
    end

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 2012-05-24
    相关资源
    最近更新 更多