合并嵌套在至少共享一个元素的数组中的数组的最佳方法是什么?下面是一个例子:
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中Ctrl - d允许在到达之后恢复代码的执行binding.pry.Elixir的等价物是什么IEx.pry?
我正在尝试从我的帐户域访问一种方法。我可以使用除(最后一个)之外的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) 在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无法"发送"?
谢谢
我想向模型添加条件自定义验证
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) 我正在尝试对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尝试到达模板的情况下呈现状态代码?
我正在尝试创建一个按钮,使给定用户成为管理员。为此,我想为请求创建一个路由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)
好像未声明嵌套资源一样。我的资源声明有什么问题?我该如何解决?