相关疑难解决方法(0)

在Ruby on Rails中重用控制器之间代码的最佳实践

我有一些我想分享的控制器方法.在轨道上的红宝石中执行此操作的最佳做​​法是什么?我应该创建一个我的控制器扩展的抽象类,还是应该创建模块并将其添加到每个控制器?以下是我想要分享的控制器方法:

def driving_directions
  @address_to = params[:address_to]
  @address_from = params[:address_from]
  @map_center = params[:map_center_start]

  # if we were not given a center point to start our map on
  # let's create one.
  if !@map_center && @address_to
    @map_center = GeoKit::Geocoders::MultiGeocoder.geocode(@address_to).ll
  elsif !@map_center && @address_from
    @map_center = GeoKit::Geocoders::MultiGeocoder.geocode(@address_from).ll
  end
end

def printer_friendly
  starting_point = params[:starting_point].split(',').collect{|e|e.to_f}
  ne = params[:ne].split(',').collect{|e|e.to_f}
  sw = params[:sw].split(',').collect{|e|e.to_f}
  size = params[:size].split(',').collect{|e|e.to_f}
  address = params[:address]

  @markers = retrieve_points(ne,sw,size,false)
  @map = initialize_map([[sw[0],sw[1]],[ne[0],ne[1]]],[starting_point[0],starting_point[1]],false,@markers,true)
  @address_string = address
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails

81
推荐指数
3
解决办法
3万
查看次数

尝试从Rails控制器调用helper方法时出现NoMethodError

我正NoMethodError试图从我的一个控制器类中访问我的一个辅助模块中定义的方法.My Rails应用程序使用helper带有:all符号的类方法,如下所示:

class ApplicationController < ActionController::Base
  helper :all
  .
  .
end
Run Code Online (Sandbox Code Playgroud)

我的理解是,这应该使我的所有控制器类自动包含app/helpers目录中的所有辅助模块,因此将所有方法混合到控制器中.它是否正确?

如果我include在控制器中明确指出了辅助模块,那么一切正常.

ruby ruby-on-rails

73
推荐指数
7
解决办法
6万
查看次数

未定义的辅助方法

我有个问题:

undefined method `avatar_url' for #<User:0x000000040783a8>
Run Code Online (Sandbox Code Playgroud)

控制器:

class ApplicationController < ActionController::Base
  protect_from_forgery
  helper :all
  helper_method :avatar_url

  protected

  def avatar_url(user)
    if user.avatar_url.present?
      user.avatar_url
    else
      default_url = "#{root_url}images/guest.png"
      gravatar_id = Digest::MD5.hexdigest(user.email.downcase)
      "http://gravatar.com/avatar/#{gravatar_id}.png?s=48&d=#{CGI.escape(default_url)}"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

在视图中:

...
<%for user in @users %>
  <%= image_tag avatar_url(user) %>, username: <%= user.username %>, e-mail: <%= user.email %>
<% end %>
...
Run Code Online (Sandbox Code Playgroud)

谁来帮帮我?

ruby-on-rails helper

3
推荐指数
1
解决办法
1872
查看次数

Rails:在category_helper.rb中定义的方法,category_controller.rb无法识别

更多新手问题.

我知道如果我在我的应用程序助手中定义一个方法,它可用于整个应用程序代码.

在我的应用助手中,我有:

def primary_user_is_admin

  if current_user
    user_login_roles = JSON.parse(current_user.role)
    if user_login_roles["admin"]
      return 1
    end
  end
  return nil
end
Run Code Online (Sandbox Code Playgroud)

如果我从categories_controller调用它:

if !primary_user_is_admin
  redirect_to root_url
end
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:未定义的局部变量或方法`primary_user_is_admin'

如果我将primary_user_is_admin代码放在​​registrations_helper.rb文件中,也会发生这种情况

但是,如果我在任何视图中使用它(例如views/user/edit.html.erb)

<% if primary_user_is_admin %>
<% end >
Run Code Online (Sandbox Code Playgroud)

然后它工作.我错过了什么?

ruby-on-rails

3
推荐指数
1
解决办法
4199
查看次数

标签 统计

ruby-on-rails ×4

ruby ×2

helper ×1