我似乎无法获得视图控制器堆栈中的视图控制器数量.
NSUInteger *viewControllerCount = self.navigationController.viewControllers.count;
Run Code Online (Sandbox Code Playgroud)
我可以遍历视图控制器和NSLog内部的对象,但我不能做一个简单的计数.如果我尝试访问此指针,则崩溃...没有日志,没有错误消息,nada.请帮忙!
我想从控制器中提取逻辑到可能更干的地方.在Rails中处理类似以下内容的最佳方法是什么?
例如,与在控制器中进行查询相反,我可以将其放在模型中:
class SmoothieBlender < ActiveRecord::Base
belongs_to :user
def self.get_blenders_for_user(user)
self.where(["user_id = ?", user.id])
end
end
Run Code Online (Sandbox Code Playgroud)
或者将模块创建为服务层并将其包含在使用它的每个模型中会更好吗?
module BlenderUser
def get_blenders_for_user(user)
SmoothieBlender.where(["user_id = ?", user.id])
end
end
class SmoothieBlender < ActiveRecord::Base
include BlenderUser
belongs_to :user
end
class User < ActiveRecord::Base
include BlenderUser
has_many :smoothie_blenders
end
Run Code Online (Sandbox Code Playgroud)
或者只是让它成为一个完整的服务类,可以从User和Blender控制器访问?你会把这堂课放在哪里?
class BlenderService
def self.get_blenders_for_user(user)
SmoothieBlender.where(["user_id = ?", user.id])
end
end
Run Code Online (Sandbox Code Playgroud)
我是Ruby和Rails的新手,所以如果这是一个愚蠢的问题/语法不正确,请原谅我.提前致谢!
我的控制器里有这样的东西:
class houseController = {
...
code
...
if(params.answer == null)
redirect(action:'xxx')
...
code
...
}
Run Code Online (Sandbox Code Playgroud)
我的疑问是,控制器中间的重定向.由于不在控制器的末端,它是否需要任何"返回"或类似的东西?或者,重定向完成后,之后的所有代码都被忘记了,而不是保存在内存中?我的观点,我不想用糟糕的代码浪费无用的资源.
我是CodeIgniter的新手,我希望我的问题能有一个简单的答案.
我有一个网站,里面有几个菜单项(menuA,menuB和menuC).我用控制器中的一个主控制器,index(),menuA(),menuB()和menuC()对其进行了建模.被调用函数设置会话值currentMenu并包括标题,X,页脚.其中X取决于所调用的函数.然后标题高亮显示选择的菜单.
在menuC(我的webapp中的帐户设置)中,我想有一个不同的控制器来控制AccountSettings/NotLoggedIn的子视图.
从逻辑上讲,我希望menuC()包含页眉和页脚,然后将调用转发给管理登录或子页面的子控制器.
我使用错误的框架还是有直接的方法来实现这一目标?
我一直在试图找到一种方法来显示应用程序从数据库生成的侧边菜单.由于菜单需要是用户可编辑的,我认为最好的做法是将其创建为脚手架,只需添加一个"显示菜单"动作即可以树状方式呈现菜单,而剩下的脚手架将允许管理员用户修改菜单项.
现在,我遇到了一个小问题 - 我无法找到一种方法来"调用"来自application.html.erb的show菜单操作(我将其用作所有操作和控制器的包装器).它有一个主'body',它有一个'yield'行,显然会让任何一个控制器被引用来渲染它的输出.在此之前,我希望在该HTML的不同部分显示动态菜单.
这可能吗,怎么会这样做呢?
因为无论显示哪个特定的动作(视图),都应该看到相同的菜单,我想避免在我的应用程序的每个控制器的每个视图中放置相同的"菜单渲染"逻辑.
有人知道一种生成控制器的快捷方式,该控制器继承了与ApplicationController不同的东西吗?
我目前正在运行:
rails g controller Admin::Food
Run Code Online (Sandbox Code Playgroud)
但它创造了
class Admin::FoodsController < ApplicationController
Run Code Online (Sandbox Code Playgroud)
当我真正想要的时候:
class Admin::FoodsController < AdminController
Run Code Online (Sandbox Code Playgroud)
谢谢!
ruby model-view-controller inheritance ruby-on-rails controllers
从Rspec - 控制器运行以下代码后,我从get方法中得到一个错误
it "assigns @MyItems" do
my_item = mock(:mypay_items)
my_item = mock( MyItem)
MyItem.should_receive(:all).and_return(my)
get 'index'
assigns[:my_items].should eql(my_items)
response.should be_success
end
Run Code Online (Sandbox Code Playgroud)
它会导致错误:
undefined method `get' for #<RSpec::Core::ExampleGroup::Nested_1:0x34b6ae0>
Run Code Online (Sandbox Code Playgroud) 我试图在应用程序启动时加载JSON,并在我的所有控制器之间传播数据.我知道这不是很难做,但我对所有文章/答案感到困惑,因为他们使用的语法不同于我,有人可以指导我如何去做吗?
我目前正在使控制器生成$ http.get:
myApp = angular.module("myApp", [])
myApp.controller "HomeCtrl", ($scope, $http, $routeParams) ->
$http.get('gethome.php').success (data) ->
$scope.home = data
Run Code Online (Sandbox Code Playgroud)
但是我必须在每个想要访问该数据的控制器中重复自己
我有一个模型配置,顶部有以下内容:
<?php
namespace App;
use DB;
use Illuminate\Database\Eloquent\Model;
class Config extends Model
{
protected $table = 'config';
public function getConfigVariables()
{
$config = DB::table('config')->where('is', '1')->first();
session()->put('name',$config['name']);
session()->put('infoemail',$config['infoemail']);
session()->put('copyrightowner',$config['copyrightowner']);
Run Code Online (Sandbox Code Playgroud)
我希望在控制器中调用它来设置会话,以便在我设置的顶级路由中设置
Route::get('/',
[
'uses' => 'ConfigController@ConfigVariables',
'as' => 'home'
]);
Run Code Online (Sandbox Code Playgroud)
不起作用的配置控制器方法是:
public function ConfigVariables()
{
Config::getConfigVariables();
session()->put('thisyear',ReturnCurrentYear());
$footer = "© ".session()->get('thisyear').", ".session()->get('name');
session()->put('footer',$footer);
return view('welcome');
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我被困住了!
我现在正在编写一些软件,并且第一次使用CI.
默认控制器设置为我想要操作的第一个控制器'login'(控制器是login.php,视图是login.php.当提交表单时,它调用'authenticate'控制器.执行正常,进程正确的登录数据然后在这种情况下的"新闻页面"中执行重定向命令(之前没有任何输出到屏幕)到下一页.问题是重定向,永远不会到达'newspage'但是默认控制器再次运行.
无论我放什么...... http://yourname.xyz/anything ...(是的,我使用.htaccess删除index.php)任何东西都不会被调用,只是默认的控制器.我已将标准的'welcome.php'控制器和'welcome_message.php'留在文件夹中,甚至将http://yourname.xyz/welcome放入登录界面!
我正在使用设计我的认证,它很有效.我需要一个配置文件页面,我创建了一个控制器,Users并show在其中有一个方法,链接到,show.html.erb并在id传递后工作.
我想在个人资料中添加一个链接转到网址,/users/[:id]但我无法让它工作.我试过了:
match 'users/:id', :to 'users#show', :as => :profile
Run Code Online (Sandbox Code Playgroud)
但我得到的错误说没有动作节目.
任何人都可以给我一些建议,以获得路由到他们的个人资料的链接.
我正在研究一个给我一些问题的Rails项目.我有一个控制器characters_controller.rb,有两种方法.
class CharactersController < ApplicationController
before_action :authenticate_player!
def view
@character = Character.find(params[:id])
unless @character.player_id == current_player.id
redirect_to :root
end
end
def new
end
end
Run Code Online (Sandbox Code Playgroud)
我为每个人设置了路线.
get 'characters/:id', to: 'characters#view'
get 'characters/new', to: 'characters#new'
Run Code Online (Sandbox Code Playgroud)
第一条路线工作正常.我可以转到/ characters/1,我会看到相应的视图和请求的信息.如果我访问/ characters/new,我会显示一个引用字符#view的错误.
raise RecordNotFound, "Couldn't find #{name} with '#{primary_key}'=#{id}"
Run Code Online (Sandbox Code Playgroud)
和
app/controllers/characters_controller.rb:6:in `view'
Run Code Online (Sandbox Code Playgroud)
所以/ characters/new试图从id为"new"的数据库中获取一个Character但是效果不好.知道我可能做错了吗?
我试图模块化我的代码并将控制器移动到使用相同模块的单独文件中.但是,它没有加载,我确保加载顺序是正确的.
// app.js
angular.module("app", []);
// LoginCtrl.js
angular.module("app", []).controller("LoginCtrl", function()
{
//doSomeThing
});
Run Code Online (Sandbox Code Playgroud)
如果我在第一个文件中执行var app = angular.module并在其他文件中使用相同的变量,它就可以工作.
// app.js
var app = angular.module("app", []);
// LoginCtrl.js
app.controller("LoginCtrl", function()
{
//doSomeThing
});
Run Code Online (Sandbox Code Playgroud)
如果我将所有代码移动到一个文件中并分别对每个组件使用angular.module,它就可以工作.
// app.js
angular.module("app", []);
angular.module("app", []).controller("LoginCtrl", function()
{
//doSomeThing
});
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
javascript module controllers angularjs angularjs-controller
controllers ×13
ruby ×5
angularjs ×2
codeigniter ×2
abstraction ×1
activerecord ×1
controller ×1
default ×1
get ×1
grails ×1
http ×1
inheritance ×1
ios ×1
iphone ×1
javascript ×1
laravel-5 ×1
menu ×1
models ×1
module ×1
nested ×1
redirect ×1
routes ×1
rspec ×1
view ×1