小编Ada*_*dam的帖子

未初始化的常量"控制器名称"

我的路由/资源和控制器出错了.

我在routes.rb中有以下内容:

# routes.rb
resources :users do  
  resource :schedule  
end
Run Code Online (Sandbox Code Playgroud)

我在控制器/用户/内部设置了schedule_controller.rb,因为我认为它应该是:

class Users::ScheduleController < ApplicationController

  # Controller methods here...

end
Run Code Online (Sandbox Code Playgroud)

运行rake:路线显示

user_schedule      POST   /users/:user_id/schedule(.:format)       schedules#create
new_user_schedule  GET    /users/:user_id/schedule/new(.:format)   schedules#new
edit_user_schedule GET    /users/:user_id/schedule/edit(.:format)  schedules#edit
                   GET    /users/:user_id/schedule(.:format)       schedules#show
                   PUT    /users/:user_id/schedule(.:format)       schedules#update
Run Code Online (Sandbox Code Playgroud)

但是,导航到/ users /:user_id/schedule会返回以下错误:

uninitialized constant SchedulesController
Run Code Online (Sandbox Code Playgroud)

我的问题可能是只什么想法是,就是有事情做与嵌套的资源或宣布一个单一的资源,我要去什么地方错了.

我正在使用帮手

new_user_schedule_path(current_user)
Run Code Online (Sandbox Code Playgroud)

链接到我的"新"视图时.

ruby ruby-on-rails ruby-on-rails-3.2

15
推荐指数
3
解决办法
5万
查看次数

Rails STI覆盖所有子类的父类中的model_name

我在Rails应用程序中使用STI,为了不必为所有子类定义路由,我在每个子类中添加以下内容:

def self.model_name
  Mapping.model_name
end
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,Mapping是父模型名称.例:

class UserMapping < Mapping; end
Run Code Online (Sandbox Code Playgroud)

必须将它放在每个子类中并不是很干,所以我正在寻找一种方法在父类中以某种方式设置它,以便从父类继承的每个类自动将模型名称设置为父模型名称.

也许甚至有更好的方法来克服由于与设置无关的STI引起的路由问题model_name- 我对建议持开放态度!

提前致谢!

routing model ruby-on-rails sti

4
推荐指数
1
解决办法
1176
查看次数

Rails ActiveModel :: ForbiddenAttributesError Devise,Omniauth

我遇到了Omniauth身份验证和Rails 4的问题,我得到了一个Rails ActiveModel :: ForbiddenAttributesError.

我使用gem 'protected_attributes'如此强大的参数应该不是问题.

我的用户模型包含以下内容:

  def self.from_omniauth(auth)
    where(auth.slice(:provider, :uid)).first_or_create do |user|
      user.username = auth.info.email
      user.email = auth.info.email
      user.password = Devise.friendly_token[0,20]
      user.name = auth.info.name
    end
  end
Run Code Online (Sandbox Code Playgroud)

user.password 在那里只是为了保持与现有的Devise auth系统的兼容性.

AR错误表示此行:where(auth.slice(:provider, :uid)).first_or_create do |user|抛出错误.

从以下方法调用上述方法:

class OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def mavenlink
    @user = User.from_omniauth(request.env['omniauth.auth'])
    service = @user.services.initialize_or_update_via_omniauth(request.env['omniauth.auth'])
    if service && service.save
      sign_in_and_redirect @user #this will throw if @user is not activated
      set_flash_message(:notice, :success, :kind => "Mavenlink") if is_navigational_format?
    else
      redirect_to root_path, error: "Error signing in …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails devise omniauth strong-parameters

2
推荐指数
1
解决办法
1649
查看次数