如何使用多个控制器方法创建侧边栏?
How to Create a Sidebar with Multiple Controller Methods?
我有多个控制器,我想将它们的一些方法拉到我的侧边栏中:
habits_controller
goals_controller
valuations_controller
quantifieds_controller
users_controller
如何在不出现未定义方法错误的情况下执行此操作?
我尝试创建一个 sidebar_controller,但我应该在其中包含什么才能使其正常工作?
让我们以习惯为例,然后我可以将我学到的经验教训应用到我自己的其他控制器上。
摘自_sidebar.html.erb
<div id="sidebarheadingtop" class="panel-heading"><h5><b>Today</b></h5></div>
<% @habits.each do |habit| %>
<td><%= raw habit.tag_list.map { |t| link_to t.titleize, tag_path(t) }.join(', ') %></td>
<% end %>
</div>
habits_controller
class HabitsController < ApplicationController
before_action :set_habit, only: [:show, :edit, :update, :destroy]
before_action :logged_in_user, only: [:create, :destroy]
def index
if params[:tag]
@habits = Habit.tagged_with(params[:tag])
else
@habits = Habit.all.order("date_started DESC")
@habits = current_user.habits
end
end
def show
end
def new
@habit = current_user.habits.build
end
def edit
end
def create
@habit = current_user.habits.build(habit_params)
if @habit.save
redirect_to @habit, notice: 'Habit was successfully created.'
else
@feed_items = []
render 'pages/home'
end
end
def update
if @habit.update(habit_params)
redirect_to @habit, notice: 'Habit was successfully updated.'
else
render action: 'edit'
end
end
def destroy
@habit.destroy
redirect_to habits_url
end
private
def set_habit
@habit = Habit.find(params[:id])
end
def correct_user
@habit = current_user.habits.find_by(id: params[:id])
redirect_to habits_path, notice: "Not authorized to edit this habit" if @habit.nil?
end
def habit_params
params.require(:habit).permit(:missed, :left, :level, :date_started, :trigger, :target, :positive, :negative, :tag_list, :committed => [])
end
end
sidebar_controller
class SidebarController < ApplicationController
def index
@habits = current_user.habits
end
end
我还是个初学者,所以非常感谢任何帮助。谢谢=]
如果我没有正确理解您的问题:您希望从各种控制器获取方法,然后在边栏控制器中调用这些方法。
在我看来,这似乎违背了惯例,听起来有点奇怪。如果您希望使您的应用程序 restful.
,则不应从另一个控制器调用控制器的方法
如果你希望混入 跨多个控制器的方法(编写一次方法,然后将该方法混合到一堆控制器中,以便所有这些控制器都有自己的副本方法的)然后采用该共享方法并将其放入 关注点 ,然后 include
将关注点放入您的控制器中。在您的情况下:include
将该模块放入侧边栏控制器。
app/controllers/concerns/shared.rb
module Shared
def someMethod
@someVariableToPassToView = 33
end
end
app/controllers/sidebar_controller.rb
include Shared
# Your shared controller has now mixed in all the methods from within the
# Shared module ( in this case, the someMethod method)
当然不要忘记创建相应的视图来匹配侧边栏的混合方法:someMethod
:
app/views/sidebar/someMethod.html.erb
<p> Outputting the contents of the variable someVariableToPassToView </p>
<p><%= @someVariableToPassToView<%></p>
此外,不要忘记更新您的 routes.rb 文件,以便您在边栏中混合操作,以便 Rails 知道如何获取到适当的视图文件:
get 'sidebar/somemethod'
回答您的问题:当我们想让控制器中的变量可用于视图时,我们将其作为实例变量传递。这就是 @
的用途,使该变量成为实例变量,以便我们可以使用 <%= %>
符号从视图中提取其内容。这就是我在上面作为示例所做的,将数字 33 从它存储的变量中提取出来:@someVariableToPassToView
我强烈推荐以下内容给你:
观看 Kevin Skoglund 的 "Ruby On Rails 4 Essential Training." 它长约 13 小时,是我在网上找到的最好的 rails 介绍。位于此处:http://www.lynda.com/Ruby-Rails-tutorials/Ruby-Rails-4-Essential-Training/139989-2.html
如果你像我一样,你会把那个培训看完大约三遍,然后再回头看培训视频的各个部分。适应之后,前往 www.codeschool.com 并观看他们的课程:"Rails 4: Zombie Outlaws" 和 "Rails 4 Patterns."
当然,在深入研究 rails 之前,您需要确保对 ruby 编程语言有扎实的了解。 Rails 会产生更多,因为一旦你把它放在上下文中:Rails 只是 ruby 代码。 Kevin Skoglund 在 Ruby 上有一个很棒的培训视频:http://www.lynda.com/Ruby-tutorials/essential-training/47905-2.html
祝你好运!
我有多个控制器,我想将它们的一些方法拉到我的侧边栏中:
habits_controller
goals_controller
valuations_controller
quantifieds_controller
users_controller
如何在不出现未定义方法错误的情况下执行此操作?
我尝试创建一个 sidebar_controller,但我应该在其中包含什么才能使其正常工作?
让我们以习惯为例,然后我可以将我学到的经验教训应用到我自己的其他控制器上。
摘自_sidebar.html.erb
<div id="sidebarheadingtop" class="panel-heading"><h5><b>Today</b></h5></div>
<% @habits.each do |habit| %>
<td><%= raw habit.tag_list.map { |t| link_to t.titleize, tag_path(t) }.join(', ') %></td>
<% end %>
</div>
habits_controller
class HabitsController < ApplicationController
before_action :set_habit, only: [:show, :edit, :update, :destroy]
before_action :logged_in_user, only: [:create, :destroy]
def index
if params[:tag]
@habits = Habit.tagged_with(params[:tag])
else
@habits = Habit.all.order("date_started DESC")
@habits = current_user.habits
end
end
def show
end
def new
@habit = current_user.habits.build
end
def edit
end
def create
@habit = current_user.habits.build(habit_params)
if @habit.save
redirect_to @habit, notice: 'Habit was successfully created.'
else
@feed_items = []
render 'pages/home'
end
end
def update
if @habit.update(habit_params)
redirect_to @habit, notice: 'Habit was successfully updated.'
else
render action: 'edit'
end
end
def destroy
@habit.destroy
redirect_to habits_url
end
private
def set_habit
@habit = Habit.find(params[:id])
end
def correct_user
@habit = current_user.habits.find_by(id: params[:id])
redirect_to habits_path, notice: "Not authorized to edit this habit" if @habit.nil?
end
def habit_params
params.require(:habit).permit(:missed, :left, :level, :date_started, :trigger, :target, :positive, :negative, :tag_list, :committed => [])
end
end
sidebar_controller
class SidebarController < ApplicationController
def index
@habits = current_user.habits
end
end
我还是个初学者,所以非常感谢任何帮助。谢谢=]
如果我没有正确理解您的问题:您希望从各种控制器获取方法,然后在边栏控制器中调用这些方法。
在我看来,这似乎违背了惯例,听起来有点奇怪。如果您希望使您的应用程序 restful.
,则不应从另一个控制器调用控制器的方法如果你希望混入 跨多个控制器的方法(编写一次方法,然后将该方法混合到一堆控制器中,以便所有这些控制器都有自己的副本方法的)然后采用该共享方法并将其放入 关注点 ,然后 include
将关注点放入您的控制器中。在您的情况下:include
将该模块放入侧边栏控制器。
app/controllers/concerns/shared.rb
module Shared
def someMethod
@someVariableToPassToView = 33
end
end
app/controllers/sidebar_controller.rb
include Shared
# Your shared controller has now mixed in all the methods from within the
# Shared module ( in this case, the someMethod method)
当然不要忘记创建相应的视图来匹配侧边栏的混合方法:someMethod
:
app/views/sidebar/someMethod.html.erb
<p> Outputting the contents of the variable someVariableToPassToView </p>
<p><%= @someVariableToPassToView<%></p>
此外,不要忘记更新您的 routes.rb 文件,以便您在边栏中混合操作,以便 Rails 知道如何获取到适当的视图文件:
get 'sidebar/somemethod'
回答您的问题:当我们想让控制器中的变量可用于视图时,我们将其作为实例变量传递。这就是 @
的用途,使该变量成为实例变量,以便我们可以使用 <%= %>
符号从视图中提取其内容。这就是我在上面作为示例所做的,将数字 33 从它存储的变量中提取出来:@someVariableToPassToView
我强烈推荐以下内容给你:
观看 Kevin Skoglund 的 "Ruby On Rails 4 Essential Training." 它长约 13 小时,是我在网上找到的最好的 rails 介绍。位于此处:http://www.lynda.com/Ruby-Rails-tutorials/Ruby-Rails-4-Essential-Training/139989-2.html
如果你像我一样,你会把那个培训看完大约三遍,然后再回头看培训视频的各个部分。适应之后,前往 www.codeschool.com 并观看他们的课程:"Rails 4: Zombie Outlaws" 和 "Rails 4 Patterns."
当然,在深入研究 rails 之前,您需要确保对 ruby 编程语言有扎实的了解。 Rails 会产生更多,因为一旦你把它放在上下文中:Rails 只是 ruby 代码。 Kevin Skoglund 在 Ruby 上有一个很棒的培训视频:http://www.lynda.com/Ruby-tutorials/essential-training/47905-2.html
祝你好运!