我有一个想法,我想实现它主要涉及将MVC4项目中的控制器分成2个不同的项目.原因是我希望能够为我的网站的内部管理部分和外部客户端部分使用不同的控制器.我想单独更改它们中的每一个,并在我进行更改时向网站添加一个新的DLL ...对站点内部管理部分的更改因此不会影响外部客户端部分的控制器DLL,例如.
有谁知道这是可行的/可取的还是更好的方法来实现我想要实现的目标?
我已经阅读了一些帖子,例如在 Rails 4 中使用强参数的值白名单,但这并不是我所需要的。
我有一个控制器,它需要一个 ID 并加载一个模型。它还可选地采用查询字符串 param ( style) ,它可以是 3 个值之一,small,medium或large。这被传递给模型上的一个方法,该方法使用它来获取附加的图像(使用回形针)。我注意到如果我传递了一个无效的参数(例如style=wibble),那么我会收到一个 400 错误并通知内部文件路径不存在。Brakeman 还指出这是一个安全问题......
def show
style = params[:style] || :medium
thing = Model.find(params[:id])
path = "#{Rails.root}/public#{thing.image_url(style)}"
content_type = thing.image.content_type || 'image/png'
send_file path, type: content_type, disposition: 'inline'
end
Run Code Online (Sandbox Code Playgroud)
我们在其他地方使用ActionController 参数效果很好;但我看不到如何将参数选项“列入白名单”?我所看到的任何地方都说要使用模型验证器,但这是假设我正在提交一个参数来更新模型,而我不是。
我知道我可以这样做:
return head :not_found unless %w(small medium large).include? style
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?
我正在研究一个有很多相关模型的应用程序,并希望听到一些关于如何最好地组织控制器的意见.
以下是我一直在考虑的一些选项:
1)命名空间控制器.因此,例如,有一个控制器/管理目录和一个控制器/公共目录.这似乎对组织很有吸引力,但也因为单个资源通常可能具有明显属于不同目录的动作(例如,show动作是公共的而创建动作是admin).所以这意味着将我的一些资源分解为两个独立的控制器 - 一个公共管理员,一个管理员.看起来很糟糕.
2)创建嵌套资源.我只是偶尔使用嵌套资源,所以我不总是清楚什么时候最好嵌套资源而不是简单地通过params传递你需要的数据.有没有人有一些关于如何最好地使用嵌套资源的建议/示例?什么时候这是个好主意?什么时候是矫枉过正?
3)只留下默认的脚手架控制器.在需要时创建新的集合/成员操作,并在过滤器之前使用以在每个控制器中设置权限.这看起来最吸引人,因为它可以提前保持简单.但是,由于一些控制器可能会因为一些新的动作而开始膨胀,因此我对于线路变得混乱的事情感到紧张.
如果有任何有大型应用程序设计经验的人可以在这里提供一些指导,那就非常感谢.
说我有以下代码,在记事本中嘲笑,所以原谅任何小错误:)
//Default page
public ActionResult Index()
{
var musicViewModel
{
Albums = GetTopSellingAlbums(5),
Genres = GetTopGenres(5),
Artists = GetTopArtists(5)
};
return View(musicViewModel);
}
[HttpPost]
public ActionResult Index(MusicViewModel musicViewModel)
{
//For the example, pretend I have a class called musicStoreSubmission in my
//viewmodel which holds a few different fields the user fills out.
if(ModelState.IsValid)
{
//Do some actions based on the user submitting a form
}
//Else, refresh page with errors in Modelstate.
var musicViewModel
{
Albums = GetTopSellingAlbums(5),
Genres = …Run Code Online (Sandbox Code Playgroud) 我正在创建一个Rails 3插件,我想在其中集成控制器,这些控制器将被rails自动考虑为app/controllers文件夹中的"普通"控制器.我怎么能这样做或者从插件中获得自定义控制器的最佳解决方案是什么?我找到了来自guides.rubyonrails.org的文档,但他们已经更改了文档,插件开发不再包含控制器了.
谢谢
我有一个具有递归关系的数据集的应用程序(树视图,使用递归.)我已经尝试了几种方法通过Angular实现这一点,但似乎没有一种方法可以提供可行的结果.
这里的想法是我希望使用一组嵌套列表渲染这些数据,允许多个(7+)级别的深度.为了简化(我的实际应用程序使用Restangular)我已经构建了以下plunker:
http://plnkr.co/edit/dKT9OvpsMgnxmLwgF0ij
虽然"顶级"级数据正确呈现(只是第一个标题),但我尝试使用嵌套控制器进行递归似乎失败了.这里的想法是树中的每个"子"都使用它自己的控制器进行渲染,然后控制器可以渲染它的子节点,等等.我意识到嵌套控制器可能不是"最好的"方式,但经过多次搜索后我还没有找到"更好"的选择.
重要的是,最终的解决方案在此处保留了"嵌套"的概念(每个元素出现在其父元素下方,略有缩进.)
我的申请已经开始,然后我继续注册.输入我的信息后,我收到一个错误页面说:
用户控件#creore中的Errno :: ECONNREFUSED
Connection refused - {:data=>"<?xml version=\"1.0\" encoding=\"UTF-8\"?><add><doc><field name=\"id\">User 1</field><field name=\"type\">User</field><field name=\"type\">ActiveRecord::Base</field><field name=\"class_name\">User</field><field name=\"username_text\">mikeadeleke</field><field name=\"bio_text\">Founder of Edopter</field></doc></add>", :headers=>{"Content-Type"=>"text/xml"}, :method=>:post, :params=>{:wt=>:ruby}, :query=>"wt=ruby", :path=>"update", :uri=>#<URI::HTTP:0x007fb6c3c911d0 URL:http://localhost:8982/solr/update?wt=ruby>, :open_timeout=>nil, :read_timeout=>nil, :retry_503=>nil, :retry_after_limit=>nil}
Run Code Online (Sandbox Code Playgroud)
消息:
app/controllers/users_controller.rb:14:in `create'
Run Code Online (Sandbox Code Playgroud)
所以这是我的代码导致了阻塞.我看到没有问题,并通过roodi验证器运行它.
class UsersController < ApplicationController
before_filter :get_user, except: [:new, :create]
def get_user
@user = User.find_by_username(params[:user_name])
end
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Woohoo! Thanks for creating an account. Feel free to edit your profile or look …Run Code Online (Sandbox Code Playgroud) 在我的Angular应用程序中,我有一些函数,我认为应该在全局控制器中.在服务器端MVC框架中,通常有一个全局控制器,所有其他控制器都扩展,这是我放置这些功能的地方.我想知道Angular是否有类似的东西.
所以目前我有这个app.js:
'use strict';
// Declare app level module
var app = angular.module('app', ['ngRoute']).config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
// Possible routes can go here
}]);
Run Code Online (Sandbox Code Playgroud)
这个在controllers.js:
app.controller('DownloadsController', function ($scope) {
});
Run Code Online (Sandbox Code Playgroud)
我希望能够在我的应用程序中添加下载,所以我写$scope.addDownload = function() { ... }的DownloadsController.这将有效,但是我希望能够在我的应用程序中的任何地方添加下载,这意味着addDownload()无论我在哪个控制器中调用该函数.
我可以定义一个包含该addDownload()功能的全局控制器,并能够从我的所有控制器调用该功能吗?
我已经找到了关于处理嵌套资源控制器和传递多个约束的好信息,但似乎没有发现这个特定问题(可能是因为我认为这一切都错了!).
如果我想在我的API中创建以下内容
我是否必须以这种方式为大多数人创建路线和控制器
Route::group(array('prefix' => 'myAwesomeCarApi'), function()
{
Route::resource('cars', 'CarsController');
Route::resource('cars/performance', 'CarsPerController');
Route::resource('cars/performance/parts', 'CarsPerPartsController');
Route::resource('cars.performance/parts', 'CarsPerPartsController');
Route::resource('parts', 'PartsController');
Route::resource('parts/performance', 'PartsPerController');
etc...
});
Run Code Online (Sandbox Code Playgroud)
或者是否有一些技巧我缺少创建动态控制器,例如只有3(CarController,PartsController,PerformanceController)和处理代码中的不同路由?
controllers ×10
angularjs ×2
javascript ×2
actionresult ×1
asp.net-mvc ×1
assemblies ×1
c# ×1
jmeter ×1
laravel ×1
plugins ×1
recursion ×1
rest ×1
routes ×1
ruby ×1
security ×1
sunspot-solr ×1
tree ×1
validation ×1