小编Mie*_*yba的帖子

在初始化程序中访问 Rails 引擎的 URL 帮助程序

我正在尝试访问引擎中的 url 帮助程序来设置rack-cors。现在,我已经对 rack-cors 中间件配置中的其中一个 URL 的字符串进行了硬编码。我已经阅读了 Rails 初始化程序的运行顺序,在加载顺序的这一点上,我应该有可用的引擎路由。我以为我会在活动中提供它们add_routing_paths,但是在使用 pry 挖掘后我找不到路线。另一个让我认为我这样做不正确的声明是文档说:“您的应用程序的某些部分,特别是路由,尚未在调用 after_initialize 块时设置。” 根据这份清单

  1. 需要“config/boot.rb”来设置加载路径
  2. 需要导轨和引擎
  3. 将 Rails.application 定义为“class MyApp::Application < Rails::Application”
  4. 运行 config.before_configuration 回调
  5. 加载配置/环境/ENV.rb
  6. 运行 config.before_initialize 回调
  7. 运行由 railties、引擎和应用程序定义的 Railtie#initializer。每个引擎一个接一个地设置其加载路径、路由并运行其 config/initializers/* 文件。
  8. 自定义 Railtie#initializers 添加的 railties,引擎和应用程序被执行
  9. 构建中间件堆栈并运行 to_prepare 回调
  10. 运行 config.before_eager_load 和eager_load!如果eager_load 为真
  11. 运行 config.after_initialize 回调

我正在尝试连接 (7),但也许直到 (11) 才可用路由?

module Zillow
  class Engine < ::Rails::Engine
    isolate_namespace Zillow

    # Rails.application.routes.url_helpers

    initializer "zillow.cors", after: :set_routes_reloader do |app|
      require 'pry'; binding.pry
      app.config.app_middleware.insert_before …
Run Code Online (Sandbox Code Playgroud)

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

6
推荐指数
2
解决办法
1885
查看次数

如何设置Ecto变更集以防止模型丢失必需的字段?

根据凤凰文件:

insert(Ecto.Schema.t | Ecto.Changeset.t,Keyword.t):: {:ok,Ecto.Schema.t} | {:error,Ecto.Changeset.t}

插入模型或变更集.

在给出模型的情况下,模型将转换为变更集,其中所有模型非虚拟字段都作为变更集的一部分.通过直接调用Ecto.Changeset.change/2来完成此转换.

如果给出变更集,则变更集中的更改将与模型字段合并,并且所有变更都将发送到数据库.

如果在给定模型中注册了任何before_insert或after_insert回调,则将使用changeset调用它们.

如果已成功插入模型,则返回{:ok,model};如果存在验证或已知约束错误,则返回{:error,changeset}.

我做了什么

defmodule Dollar.User do
    use Dollar.Web, :model

    schema "users" do
        field :username, :string
        field :sms_number, :string
        field :email, :string

        timestamps
    end

    @required_fields ~w(sms_number)
    @optional_fields ~w(username email)

    @doc """
    Creates a changeset based on the `model` and `params`.
    If no params are provided, an invalid changeset is returned
    with no validation performed.
    """
    def changeset(user, params \\ :empty) do
        user
        |> cast(params, @required_fields, @optional_fields)
        |> validate_length(:sms_number, is: 10)
        |> …
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

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