Ruby on rails 如何在Rails控制器中为特定视图配置初始化视图变量
如果我有一个方法初始化要在视图中访问的特定变量,如:Ruby on rails 如何在Rails控制器中为特定视图配置初始化视图变量,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,如果我有一个方法初始化要在视图中访问的特定变量,如: def define_personnel_attribs # Personnel editing variables include: # Array of all columns in Personnel model # Array of all columns to be displayed in table # Array of headers to be displayed in table
def define_personnel_attribs
# Personnel editing variables include:
# Array of all columns in Personnel model
# Array of all columns to be displayed in table
# Array of headers to be displayed in table
@all_attribs = ["name",
"role",
"firstname",
"middlename",
"lastname",
"address",
"city",
"state",
"zip",
"homephone",
"cellphone",
"monthly_pay",
"years_worked",
"current_assignment"]
@table_attribs = ["name",
"role"]
@table_headers = ["Name",
"Role"]
end
def admin_dashboard
if render_personnel == true
define_personnel_attribs()
end
end
我从另一个控制器方法调用它,比如:
def define_personnel_attribs
# Personnel editing variables include:
# Array of all columns in Personnel model
# Array of all columns to be displayed in table
# Array of headers to be displayed in table
@all_attribs = ["name",
"role",
"firstname",
"middlename",
"lastname",
"address",
"city",
"state",
"zip",
"homephone",
"cellphone",
"monthly_pay",
"years_worked",
"current_assignment"]
@table_attribs = ["name",
"role"]
@table_headers = ["Name",
"Role"]
end
def admin_dashboard
if render_personnel == true
define_personnel_attribs()
end
end
假设在执行控制器方法后呈现名为admin_dashboard.html.erb的视图,并且如果render_personal为FALSE,则应该在define_personal_attribs中初始化的变量是否无法初始化并可由admin_dashboard视图访问?
一些背景:
def define_personnel_attribs
# Personnel editing variables include:
# Array of all columns in Personnel model
# Array of all columns to be displayed in table
# Array of headers to be displayed in table
@all_attribs = ["name",
"role",
"firstname",
"middlename",
"lastname",
"address",
"city",
"state",
"zip",
"homephone",
"cellphone",
"monthly_pay",
"years_worked",
"current_assignment"]
@table_attribs = ["name",
"role"]
@table_headers = ["Name",
"Role"]
end
def admin_dashboard
if render_personnel == true
define_personnel_attribs()
end
end
我的目标是创建一个仪表板视图,该视图仅根据登录用户的类型呈现特定部分。例如,如果不允许用户通过人员部分(包含用于查看/编辑人员对象的表单)查看/编辑人员,则我不希望初始化人员变量
如果这不是为用户动态创建/呈现仪表板的方法,请为我指出正确的方向。我的背景主要是桌面应用程序开发,有大约7个月的web开发经验(使用C#、Javascript、CSS等),这是我的第一个Rails应用程序(自学)
如果需要更多详细信息,请询问!我也在Arazon旗下的RubyOnRails频道的Freenode上
谢谢大家! 未初始化的实例变量返回
nil
。如果您希望您的视图能够容忍这种情况,请根据需要执行零检查
我的目标是创建一个仪表板视图,该视图仅根据登录用户的类型呈现特定部分
这正是partials设计的用例类型。最佳实践是编写小的模块化部分,可以根据需要从多个视图中调用。未初始化的实例变量返回
nil
。如果您希望您的视图能够容忍这种情况,请根据需要执行零检查
我的目标是创建一个仪表板视图,该视图仅根据登录用户的类型呈现特定部分
这正是partials设计的用例类型。最佳实践是编写小的模块化部分,可以根据需要从多个视图调用。谢谢您的回答;这是否意味着我正确地假设如果render_personal为false,那么实例变量将不会初始化?是的,这是正确的。只需在视图中执行:
如果@all\u attribs.blank?
或@all\u attribs.nil?
即可处理该情况非常感谢!按照我的设置方式,使用这些变量的部分甚至不会呈现,除非相应的变量已经初始化,但我将添加这些检查以防万一。另外,我只是想验证一下我是否以正确的方式处理了这个仪表板视图……我在工作中使用了类似于C#的东西,但从Rails开始,很难找到简单易懂的例子来说明我想做的事情;这是否意味着我正确地假设如果render_personal为false,那么实例变量将不会初始化?是的,这是正确的。只需在视图中执行:如果@all\u attribs.blank?
或@all\u attribs.nil?
即可处理该情况非常感谢!按照我的设置方式,使用这些变量的部分甚至不会呈现,除非相应的变量已经初始化,但我将添加这些检查以防万一。另外,我只是想验证一下,我是以正确的方式处理这个仪表板视图的……我在工作时在C#中维护了一些类似的东西,但从Rails开始,很难找到简单易懂的例子来说明我想做的事情。