小编Dav*_* B.的帖子

Ruby:根据条件在彼此之间合并嵌套数组

合并嵌套在至少共享一个元素的数组中的数组的最佳方法是什么?下面是一个例子:

some_method([[1, 2], [2, 3], [4, 5]])
#=> [[1, 2, 3], [4, 5]]
some_method([[1, 2], [2, 3], [3, 4], [5,6]])
#=> [[1, 2, 3, 4], [5, 6]]
Run Code Online (Sandbox Code Playgroud)

ruby array-merge

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

Elixir:在到达IEx.pry后恢复代码执行

在ruby中Ctrl - d允许在到达之后恢复代码的执行binding.pry.Elixir的等价物是什么IEx.pry

elixir

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

函数未定义或私有,但应该可以访问

我正在尝试从我的帐户域访问一种方法。我可以使用除(最后一个)之外的Accounts域中的任何方法。iexmark_as_admin/1

这是域名

defmodule Storex.Accounts do
  import Ecto.Query, warn: false
  alias Storex.Repo
  alias Storex.Accounts.User

  def create_user(attrs \\ %{}) do
    %User{}
    |> User.changeset(attrs)
    |> Repo.insert()
  end

  def get_user!(id) do
    Repo.get!(User, id)
  end

  def new_user() do
    User.changeset(%User{}, %{})
  end

  def authenticate_user(email, password) do
    Repo.get_by(User, email: email)
    |> User.check_password(password)
  end

  def mark_as_admin(user) do
    user
    |> User.admin_changeset(%{is_admin: true})
    |> Repo.update()
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我输入的内容iex

iex(1)> alias Storex.Accounts
iex(2)> user = Accounts.get_user!(7)
[debug] QUERY OK source="accounts_users" db=2.2ms
SELECT a0."id", a0."email", a0."full_name", …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

3
推荐指数
1
解决办法
4922
查看次数

Rails 3:无法使用#send方法调用ActiveRecord查询(NoMethodError)

在rails控制台中,我得到了这些结果:

Employee.send("find_by_shop_id(2)")
NoMethodError: undefined method `find_by_shop_id(2)' for <Class:0x000000032f75d0> from /var/lib/gems/1.9.1/gems/activerecord 3.1.4/lib/active_record/base.rb:1088:in `method_missing'
Run Code Online (Sandbox Code Playgroud)

但是当我直接输入方法时:

Employee.find_by_shop_id(2)
=> #<Employee id: 2, first_name: "Roger", last_name: "Bartoletti", email: "marilie_hane@harris.biz", shop_id: 2>
Run Code Online (Sandbox Code Playgroud)

为什么#find_by_shop_id无法"发送"?

谢谢

ruby activerecord ruby-on-rails

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

Rails 5:添加条件自定义验证

我想向模型添加条件自定义验证

Rails允许创建方法以创建自定义验证

class Invoice < ApplicationRecord
  validate :expiration_date_cannot_be_in_the_past

  def expiration_date_cannot_be_in_the_past
    if expiration_date.present? && expiration_date < Date.today
      errors.add(:expiration_date, "can't be in the past")
  end
end
Run Code Online (Sandbox Code Playgroud)

它还允许创建条件验证

class Order < ApplicationRecord
  validates :card_number, presence: true, if: :paid_with_card?

  def paid_with_card?
    payment_type == "card"
  end
end
Run Code Online (Sandbox Code Playgroud)

如何混合两者?

我的猜测是

validate :condition, if: :other_condition
Run Code Online (Sandbox Code Playgroud)

但这会创建一个SyntaxError:

syntax error, unexpected end-of-input, expecting keyword_end
Run Code Online (Sandbox Code Playgroud)

ruby validation activerecord ruby-on-rails ruby-on-rails-5

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

Rails:呈现状态代码而不呈现模板

我正在尝试对Rails(5.1.3)应用程序进行ajax调用。我希望控制器中的目标动作呈现状态代码200,并且什么也不做。这是动作的样子。

  def some_delete_action
    respond_to do |format|
      format.js do
        render status: 200, layout: false
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

问题是Rails尝试加载与该操作关联的模板。由于我的应用程序中没有此类模板,因此出现ActionView::MissingTemplate错误。

如何在不让Rails尝试到达模板的情况下呈现状态代码?

ruby ajax ruby-on-rails ruby-on-rails-5

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

无法在 Phoenix 中创建嵌套资源

我正在尝试创建一个按钮,使给定用户成为管理员。为此,我想为请求创建一个路由post /users/:id/admin。为了做到这一点,我正在尝试创建一个嵌套资源,如下所示:

resources "/users", UserController, only: [:new, :create, :index] do
  resources "/admin", UserController, only: [:post]
end
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时mix phx.routes | grep users,我只能得到这些路线:

user_path  GET     /users            StorexWeb.UserController :index
user_path  GET     /users/new        StorexWeb.UserController :new
user_path  POST    /users            StorexWeb.UserController :create
Run Code Online (Sandbox Code Playgroud)

好像未声明嵌套资源一样。我的资源声明有什么问题?我该如何解决?

elixir phoenix-framework

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