She*_*yar 13 ruby-on-rails elixir phoenix-framework
我刚刚开始研究我的第一个凤凰应用程序,问题是我的控制器中的每个操作都有一些共同的代码行,我想分开.他们从多个Ecto模型中获取数据并将其保存到变量中以供使用.
在Rails中,我可以简单地定义一个方法并before_filter
在我的控制器中调用它.我可以从一个访问结果@variable
.我知道使用Plugs
是关键,但我不知道如何实现这一点,更具体地说:
params
来自的请求Plug
作为参考,这是我正在尝试做的rails版本:
class ClassController < ApplicationController
before_filter :load_my_models
def action_one
# Do something with @class, @students, @subject and @topics
end
def action_two
# Do something with @class, @students, @subject and @topics
end
def action_three
# Do something with @class, @students, @subject and @topics
end
def load_my_models
@class = Class.find params[:class_id]
@subject = Subject.find params[:subject_id]
@students = @class.students
@topics = @subject.topics
end
end
Run Code Online (Sandbox Code Playgroud)
谢谢!
Paw*_*rok 21
您确实可以使用Plug
和Plug.Conn.assign实现此目的.
defmodule TestApp.PageController do
use TestApp.Web, :controller
plug :store_something
# This line is only needed in old phoenix, if your controller doesn't
# have it already, don't add it.
plug :action
def index(conn, _params) do
IO.inspect(conn.assigns[:something]) # => :some_data
render conn, "index.html"
end
defp store_something(conn, _params) do
assign(conn, :something, :some_data)
end
end
Run Code Online (Sandbox Code Playgroud)
请记住在动作插件之前添加插件声明,因为它们是按顺序执行的.
归档时间: |
|
查看次数: |
2676 次 |
最近记录: |