标签: rails-api

让rails-api和strong_parameters一起工作

包括时

gem 'strong_parameters'
gem 'rails-api'
Run Code Online (Sandbox Code Playgroud)

在一起的我Gemfile,呼吁params.require

private
  def user_params
    params.require(:user).permit(:first_name, :last_name)
  end
Run Code Online (Sandbox Code Playgroud)

require()通话中出现以下错误失败.

TypeError:
   can't convert Symbol into String
Run Code Online (Sandbox Code Playgroud)

回溯显示strong_parameters' ActionController::StrongParameters' require()方法永远不会被击中.

ruby-on-rails rails-api strong-parameters

10
推荐指数
2
解决办法
4914
查看次数

使用Ionic登录fb的Rails API

我想使用离子框架为fb登录构建一个rails api.直到现在我已成功创建了一个网络基础应用程序,并且它已成功通过Facebook进行身份验证.

现在我想用基于离子的应用程序做同样的事情.

有问题吗?

  1. 是否可以使用omniauth编写rails api并使用带有离子的fb身份验证api.
  2. 如果它(1)可能是要做出或返回什么样的json请求.

无法在网上找到关于它的任何内容,也没有找到任何带离子的导轨的github项目(fb登录).

我目前的代码:

控制器:

  class SessionsController < ApplicationController
  def create
    user = User.from_omniauth(env["omniauth.auth"])
    session[:user_id] = user.id
    redirect_to root_url


  end

  def destroy
    session[:user_id] = nil
    redirect_to root_url
  end
end
Run Code Online (Sandbox Code Playgroud)

模型:

class User < ActiveRecord::Base
  def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_initialize do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.name = auth.info.name
      user.oauth_token = auth.credentials.token
      user.oauth_expires_at = Time.at(auth.credentials.expires_at)
      user.save!
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

初始化:

OmniAuth.config.logger = Rails.logger
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, "123", "abc"
end
Run Code Online (Sandbox Code Playgroud)

facebook ruby-on-rails omniauth rails-api ionic-framework

10
推荐指数
1
解决办法
912
查看次数

样式/可选布尔参数:在使用布尔参数定义方法时使用关键字参数

我正在开发 Rails RESTful API,并在某些端点上设置了版本控制功能。我有一个类ApiVersion,负责根据初始化时传递给它的参数确定要渲染哪些控制器。

类定义如下:

 class ApiVersion
  attr_reader :version, :default

  def initialize(version, default = false)
    @version = version
    @default = default
  end

  # check whether version is specified or is default
  def matches?(request)
    check_headers(request.headers) || default
  end

  private

  def check_headers(headers)
    # check version from Accept headers; expect custom media type 'suits'
    accept = headers[:accept]
    accept&.include?("application/vnd.suits.#{version}+json")
  end
end
Run Code Online (Sandbox Code Playgroud)

这些请求工作得很好,但是当我运行时,rubocop -A我收到一条错误消息:

 Style/OptionalBooleanParameter: Use keyword arguments when defining method with boolean argument.
  def initialize(version, default = false)
Run Code Online (Sandbox Code Playgroud)

我在互联网上搜索了如何修复此类错误并得到了一些有趣的想法,但这些想法不适用于我的情况。例如,我发现一篇文章说我应该交替def …

ruby ruby-on-rails internal-server-error rails-api rubocop

10
推荐指数
1
解决办法
7563
查看次数

Rails api gem和设计令牌认证

如果有人可以解决一些问题,我会非常感激,因为我对这个问题毫无头绪.基本上我正在尝试使用仅在rails-api gem 之上构建的JSON only rails rest api app来完成设计认证.

我已经实现了如下所述的处理SessionsRegistrations处理.

class ApplicationController < ActionController::API
    include ActionController::MimeResponds
end
Run Code Online (Sandbox Code Playgroud)

sessions_controller.rb

  class SessionsController < Devise::SessionsController
    prepend_before_filter :require_no_authentication, :only => [:create ]

    before_filter :ensure_params_exist
    def create
      build_resource
      resource = User.find_for_database_authentication(:email => params[:user][:email])
      return invalid_login_attempt unless resource

      if resource.valid_password?(params[:user][:password])
        sign_in("user", resource)
        render :json=> {:success=>true, :auth_token=>resource.authentication_token, :email=>resource.email}
      return
      end
      invalid_login_attempt
    end

    def destroy
      sign_out(resource_name)
    end

    protected

    def ensure_params_exist
      return unless params[:user][:email].blank?
      render :json=>{:success=>false, :message=>"missing login email parameter"}, :status=>422
    end

    def invalid_login_attempt
      warden.custom_failure! …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise rails-api

9
推荐指数
1
解决办法
9683
查看次数

如何为特定控制器禁用ActiveModel :: Serializers?

我们在Rails应用程序中使用active_model_serializers - 0.8.1.

该应用程序有一些API特定的控制器继承自ActionController :: Metal,其方式类似于rails-apiActionController :: API.

好吧,我们只想将ActiveModel :: Serializers用于上面提到的API控制器.
这可能吗,怎么样?

注意:
文档中所述,通过替换可以明确避免使用序列化程序

render :json

有:

render :json => @your_object.to_json

我们正在寻求比上述解决方案更优雅的解决方案.
谢谢.

ruby ruby-on-rails rails-api active-model-serializers

9
推荐指数
4
解决办法
5365
查看次数

活动模型序列化程序不使用rails-api gem

我在我的json api项目中使用rails-api gem,为此我使用了活动模型序列化程序gem来序列化我的对象,但是有些对象没有使用活动模型序列化程序进行序列化.

我的serializers文件夹里面有一个MessageSerializer

class MessageSerializer < ActiveModel::Serializer
  attributes :id, :sender_id, :recipient_id, :sender_type, :subj, :body, :status, :sender

  def sender
    object.user.try('username')
  end
end
Run Code Online (Sandbox Code Playgroud)

我的消息控制器如下

class Api::MessagesController < Api::BaseController

  def index
    @messages = current_user.incoming_messages
    render json: @messages, serializer: MessageSerializer
  end

end
Run Code Online (Sandbox Code Playgroud)

但问题是抛出到客户端的序列化对象包含消息模型中的所有字段,即; 它也包含created_at,updated_at字段.

好像它不使用序列化器.

可能出了什么问题?我搜索了很多关于它但没有发现任何帮助我的帖子.

谢谢

ruby-on-rails rails-api active-model-serializers

9
推荐指数
3
解决办法
2498
查看次数

在Ruby on Rails中允许CORS

在我的config/application.rb文件中,我有这个代码,

config.action_dispatch.default_headers = {
        'Access-Control-Allow-Origin' => '*',
        'Access-Control-Request-Method' => 'GET, PATCH, PUT, POST, OPTIONS, DELETE'
    }
Run Code Online (Sandbox Code Playgroud)

但是这不允许我向我的服务器上的路由发送帖子请求

Safari提供此错误:

http://localhost:3000/studentsFailed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:3000/studentsFailed to load resource: Origin http://localhost:4200 is not allowed by Access-Control-Allow-Origin.
localhost:1XMLHttpRequest cannot load http://localhost:3000/students. Origin http://localhost:4200 is not allowed by Access-Control-Allow-Origi
Run Code Online (Sandbox Code Playgroud)

在我的Rails服务器控制台中:

Started OPTIONS "/students" for ::1 at 2015-03-28 21:00:45 -0500

ActionController::RoutingError (No route matches [OPTIONS] "/students"):
Run Code Online (Sandbox Code Playgroud)

ajax ruby-on-rails cors rails-api

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

在Rails API中使用render而不是respond_with/to有什么区别?

我正在构建一个关于如何为一些学生构建API的简单rails指南,我正在构建它而没有respond_to和respond_with,因为我只是想看看我是否可以在不使用gem的情况下构建api.这就是我所拥有的和我的测试通过:

控制器:

class Api::V1::SuyasController < ApplicationController
  def index
    render json: Suya.all
  end

  def create
    render json: Suya.create(suyas_params)
  end


  private

  def suyas_params
    params.require(:suya).permit(:meat, :spicy)
  end
end
Run Code Online (Sandbox Code Playgroud)

路线:

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resources :vendors
      resources :suyas
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

测试:

require 'test_helper'

class Api::V1::SuyasControllerTest < ActionController::TestCase
  test "index can get all the suyas" do
    Suya.create(meat: "beef", spicy: true)
    Suya.create(meat: "kidney", spicy: false)

    get :index
    suyas = JSON.parse(response.body)

    assert_equal "beef", suyas[0]["meat"]
    assert_equal true, suyas[0]["spicy"]
    assert_equal "kidney", suyas[1]["meat"]
    assert_equal false, …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-api

9
推荐指数
1
解决办法
4607
查看次数

REST API版本控制 - 为什么版本不是模型

我一直在阅读REST API版本的所有方法.在几乎所有实现中,控制器和视图都是版本化的,但模型不是.

为了给出rails示例,控制器组织为:

# app/controllers/api/v1/events_controller.rb
class Api::V1::EventsController < Api::ApiController

end
Run Code Online (Sandbox Code Playgroud)

相应的视图也放在不同版本的目录中.为什么我们没有版型号?是因为我们希望我们的模型(底层数据库模式)不随着API的发展而改变吗?当我在数据库中重命名列名并需要新模型来解释时会发生什么?

versioning rest ruby-on-rails semantic-versioning rails-api

9
推荐指数
2
解决办法
1858
查看次数

将rails_admin与rails_api一起使用

我最初在rails_api GitHub上发布了这个问题,但现在由于不活动而在此发布.

我正在尝试使用rails_adminRails 5 API应用程序.我添加了额外的ActionController模块,以至于我可以使用有效的rails_admin面板或工作API请求.问题似乎是rails_admin依赖于ActionView::Layouts,包含后会导致API请求出现问题.

的Gemfile:

gem 'rails', '>= 5.0.0.beta3', '< 5.1'
...
gem 'rack-pjax', github: 'afcapel/rack-pjax'
gem 'remotipart', github: 'mshibuya/remotipart'
gem 'kaminari', github: 'amatsuda/kaminari', branch: '0-17-stable'
gem 'rails_admin', github: 'sferik/rails_admin'
Run Code Online (Sandbox Code Playgroud)

我配置我的应用程序使用ActionDispatch::Flash:

module MyApp
  class Application < Rails::Application
    ...
    config.middleware.use ActionDispatch::Flash
  end
end
Run Code Online (Sandbox Code Playgroud)

我为Rails API,ApplicationController 配置了额外的模块:

class ApplicationController < ActionController::API
  include Knock::Authenticatable
  include Pundit

  # RailsAdmin support
  include AbstractController::Helpers
  include ActionController::Flash
  include ActionController::RequestForgeryProtection
  include ActionController::MimeResponds
  include ActionController::HttpAuthentication::Basic::ControllerMethods
  include …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails actionview rails-admin rails-api ruby-on-rails-5

9
推荐指数
1
解决办法
2296
查看次数