我目前有一个页面,需要11秒钟才能加载。我正在使用Bullet Gem帮助我找到N + 1查询的发生位置。它给了我一些输出,但是我真的不知道该怎么做。这是Bullet的输出:
GET /events/1679/dashboard
USE eager loading detected
RSVP => [:tickets]
Add to your finder: :includes => [:tickets]
Call stack
/Users/cameronbass/Desktop/Work/blackbird-rsvp/app/decorators/rsvp_decorator.rb:54:in `tickets?'
/Users/cameronbass/Desktop/Work/blackbird-rsvp/app/views/accepted_rsvps/_list.html.erb:33:in `block in _app_views_accepted_rsvps__list_html_erb___1211423417683052584_70339569780320'
Run Code Online (Sandbox Code Playgroud)
告诉我放在这条线上
def tickets?
rsvp.tickets.any?
end
Run Code Online (Sandbox Code Playgroud)
这是关联:
has_many :tickets, through: :attendees
Run Code Online (Sandbox Code Playgroud)
Attendee.rb
has_one :ticket
Run Code Online (Sandbox Code Playgroud) 我正在阅读elixir文档,我遇到了这段代码:
List.foldl([1, 2, 3, 4], 0, fn(x, acc) -> x - acc end) # 2
Run Code Online (Sandbox Code Playgroud)
我试了一会儿才明白它在做什么,但对于我的生活,我不明白为什么这会返回2?如果有人可以花时间向我解释这一点,我很感激.
我完全明白第二个arg是一个累加器.设置为0不应该返回10?
我正在阅读 Elixir 文档,并且遇到了 Elixir List 模块的“foldr”函数。我真的很难理解它。这是医生所说的:
Folds (reduces) the given list from the right with a function. Requires an accumulator.
iex> List.foldr([1, 2, 3, 4], 0, fn(x, acc) -> x - acc end)
-2
Run Code Online (Sandbox Code Playgroud)
所以这应该返回-2。但是当我读到它时,我似乎认为它每次都试图将一个数字减0,如果是这样的话我们如何得到-2?我显然不明白累加器,有人可以帮我分解它吗?
我正在学习长生不老药,有一件事我不明白你看到地图作为函数参数的风格。你看到的最常见的地方是在这样的控制器中:
控制器def create(conn, %{"league" => league_params}) do
league = %League{}
|> League.changeset(league_params)
|> Repo.insert()
case league do
{:ok, league} ->
conn
|> put_flash(:info, "League Created Successfully.")
|> redirect(to: page_path(conn, :index))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
Run Code Online (Sandbox Code Playgroud)
所以,create/2功能。第二个参数看起来像这样%{"league" => league_params}。如果我错了,请纠正我,但这是一张地图,那么为什么我们引用下面的值League.changeset(league_params)而不是键League.changeset("league")呢?
这似乎是一个愚蠢的问题,但我无法弄清楚这个问题,而且我找不到这个问题的文档。谢谢您的帮助。
我正在尝试在构建联盟结构时添加user_id,但它给了我这个错误:
** (KeyError) key :user_id not found in: %{__meta__: #Ecto.Schema.Metadata<:built, "leagues">, __struct__: Statcasters.Schema.League, id: nil, inserted_at: nil, name: nil, teams: #Ecto.Association.NotLoaded<association :teams is not loaded>, updated_at: nil, users: #Ecto.Association.NotLoaded<association :users is not loaded>, users_id: nil}
(stdlib) :maps.update(:user_id, {{:., [line: 14], [{:user, [line: 14], nil}, :id]}, [line: 14], []}, %{__meta__: #Ecto.Schema.Metadata<:built, "leagues">, __struct__: Statcasters.Schema.League, id: nil, inserted_at: nil, name: nil, teams: #Ecto.Association.NotLoaded<association :teams is not loaded>, updated_at: nil, users: #Ecto.Association.NotLoaded<association :users is not loaded>, users_id: nil})
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
def new(conn, _params) …Run Code Online (Sandbox Code Playgroud) 我有一个索引视图,submissions并且在该视图中@submissions,控制器看起来像这样:
def index
@submissions = Submission.submissions_for(user: current_user)
end
Run Code Online (Sandbox Code Playgroud)
从视图中,我基本上想单击一个按钮并传递该列表中的 submissions
我曾想过要添加一条新路线,如下所示:
<%= link_to "Export", export_submissions_path(submissions: @submissions) %>
Run Code Online (Sandbox Code Playgroud)
但这感觉不太正确,因为我需要留在索引页面上。因此,当用户单击export按钮时,他们停留在index页面上,但是创建了当前数据的CSV。因此,这个问题是“如何创建CSV”,更多的是我如何停留在索引页面上并向服务器发送请求以发送CSV?
我得到一个零级错误.我完全理解这个错误告诉我的是什么,但我不知道为什么它是零.在我看来应该有一个对象传递到我的表.这应该很容易调试.这是我的代码清晰.
控制器方法:
def info
@subscriber = Subscriber.find_by_phone_number(params[:phone_number])
end
Run Code Online (Sandbox Code Playgroud)
视图:
<% @subscriber.each do |subscriber| %>
<tr>
<td><%= image_tag avatar_url(subscriber) %></td>
</tr>
<% end %>
Run Code Online (Sandbox Code Playgroud)
错误:
Showing /Users/intern/Desktop/Rails/rowster/app/views/subscribers/info.html.erb where line #3 raised:
undefined method `each' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
绑定信息方法:
[1] pry(#<SubscribersController>)> @subscriber
=> nil
Run Code Online (Sandbox Code Playgroud)
如果您需要更多信息,请告诉我?
我有一个文本字段,它接受一个字符串值,如
"games,fun,sports"
Run Code Online (Sandbox Code Playgroud)
我的主要目标是获取字符串并将其转换为如下所示的数组:
[games, fun, sports]
Run Code Online (Sandbox Code Playgroud)
在我拥有的集成对象的filters属性中.现在我有一个似乎不起作用的方法的开头.
这是我的代码:
视图:
<%= form_for @integrations, url: url_for(:controller => :integrations, :action => :update, :id => @integrations.id) do |f| %>
<%= f.label :filters %>
<%= f.text_field :filters, class: "filter-autocomplete" %>
<%= f.submit "Save" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这是接收字符串的文本字段.
模型:
def filters=(filters)
end
Run Code Online (Sandbox Code Playgroud)
这是我想从字符串切换到数组的地方.
控制器:
def update
@integrations = current_account.integrations.find(params[:id])
if @integrations.update_attributes(update_params)
flash[:success] = "Filters added"
redirect_to account_integrations_path
else
render :filters
end
end
def filters
@integrations = current_account.integrations.find(params[:id])
end
private
def update_params
[:integration_webhook, :integration_pager_duty, :integration_slack].each do …Run Code Online (Sandbox Code Playgroud) 我的GenServer中有一个状态原子数组.我不想只是弹出队列中的最后一项,我想立即弹出所有状态.
defmodule ScoreTableQueue do
use GenServer
@impl true
def init(stack) do
{:ok, stack}
end
@impl true
def handle_call(:pop, _from, [state]) do
{:reply, [state]}
end
@impl true
def handle_cast({:push, item}, state) do
{:noreply, [item | state]}
end
end
Run Code Online (Sandbox Code Playgroud)
{:status, #PID<0.393.0>, {:module, :gen_server},
[
[
"$initial_call": {ScoreTableQueue, :init, 1},
"$ancestors": [#PID<0.383.0>, #PID<0.74.0>]
],
:running,
#PID<0.393.0>,
[],
[
header: 'Status for generic server <0.393.0>',
data: [
{'Status', :running},
{'Parent', #PID<0.393.0>},
{'Logged events', []}
],
data: [{'State', [:code, :hello, :world]}]
]
]} …Run Code Online (Sandbox Code Playgroud) 我有一个名为的应用程序MyApp,每当我通过它打开IEx会话时,iex -S mix都必须像这样调用回购协议:MyApp.Repo.all(MyApp.User)。
如果我可以自动导入项目模块,那么我将很喜欢,因此我只需这样做Repo.all(User)即可获得与上述相同的值。
有没有办法可以做到这一点?