当我与Google OpenID提供商进行乒乓球比赛时,我无法获得友好的名字/昵称/用户名(无论你想叫什么).
我得到的东西看起来很糟糕,如下所示:
www.google.com/accounts/o8/id?id=AItOawmtAnQvSXGhRTkAHZWyxi4L4EKa7xoTT1dk
Run Code Online (Sandbox Code Playgroud)
而不是喜欢的东西
JohnDoe
Run Code Online (Sandbox Code Playgroud)
什么是以友好的方式从Google获取用户名称的协议,比如myopenid呢?
**我正在使用DotNetOpenAuth*
当你被分配到那些令人厌恶和过时的代码时,你会怎么做?这几乎是不可理解的?
例如:硬件接口代码,混合逻辑,AND用户界面代码,ALL在同一个功能中?
我们一直看到不好的代码,但你实际上对它做了什么?
我一直在遵循15个TDD步骤来创建Rails应用程序指南 - 但是遇到了一个我似乎无法解决的问题.对于WordsController的功能测试,我有以下代码:
class WordsControllerTest < ActionController::TestCase
test "should get learn" do
get 'learn'
assert_response :success
end
test "learn passes a random word" do
some_word = Word.new
Word.expects(:random).returns(some_word)
get 'learn'
assert_equal some_word, assigns('word')
end
end
Run Code Online (Sandbox Code Playgroud)
在Word类中,我有以下代码:
class Word < ActiveRecord::Base
def self.random
all = Word.find :all
all[rand(all.size)]
end
end
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,我遇到以下错误(为简洁起见缩短):
1) Failure: unexpected invocation: Word(...).random() satisfied expectations:
- expected exactly once, already invoked once: Word(...).random()
Run Code Online (Sandbox Code Playgroud)
我已经尝试过更改测试顺序以及其他许多内容,但是我一次又一次地继续接收相同的测试失败 - 已经调用了Word.random().
我正在运行Rails 3.0 beta 4和Mocha 0.9.8.我一直在努力寻找解决问题的方法,但我似乎无法找到它.我是Ruby/Rails的新手,所以我对语言和框架并不熟悉.
提前致谢!
在我一直在研究的一些MVC项目中,显而易见的是,有一些有问题的控制器已经有机地成长为上帝类 - 如果你愿意的话,每个人都在他们自己的领域.
这个问题可能更多的是"什么在哪里",但我认为这是一个关于SRP(单一责任原则),DRY(不要重复自己),保持简洁,"敏捷"的重要问题 - 而且我没有足够的经验(有这种模式和一般设计)对此有所了解.
在一个项目中,我们有一个NutritionController.随着时间的推移,它已经成长为包含这些动作(许多动作都有各自的GET,POST和DELETE方法):
Run Code Online (Sandbox Code Playgroud)Index (home controller) ViewFoodItem AddFoodItem EditFoodItem DeleteFoodItem ViewNutritionSummary SearchFoodItem AddToFavorites RemoveFromFavorites ViewFavorites
然后我们有一个ExerciseController,它将包含许多类似的操作,例如搜索和收藏夹操作.这些应该重构到他们自己的控制器中,以便它是这样的吗?
SearchController {
SearchExercise
SearchNutrition
//... etc
}
FavoritesController {
ViewNutritionFavorites
AddToNutritionFavorites
AddToExerciseFavorites
EditNutritionFavorites
EditExerciseFavorites
//... etc
}
Run Code Online (Sandbox Code Playgroud)
在我看来,如果你将它们分解为单独的控制器,你将在某种程度上增加一个令人难以置信的大依赖性来处理你需要的信息.或者你将拥有一个非常难以处理的完全通用的处理应用程序,因为你必须跳过这么多的箍来获得你想要的效果(在M,V或C级别).
我想错了吗?例如,我应该有一个通用的收藏夹对象,然后让控制器决定将它扔到哪个视图?
*很抱歉拼写出缩略语 - 我这样做是为了防止其他人遇到这个问题并且对这些东西是什么一无所知
编辑: 我执行的所有逻辑几乎都在服务层中处理.例如,控制器将'new'FoodItem发送给服务.如果它已经存在,或者它有错误,服务会将其冒泡回控制器.
model-view-controller asp.net-mvc design-patterns god-object
如何将以下SQL查询转换为ActiveRecord关系,以便我可以使用范围扩展它?
WITH joined_table AS (
SELECT workout_sets.weight AS weight,
workouts.user_id AS user_id,
workouts.id AS workout_id,
workout_sets.id AS workout_set_id,
workout_exercises.exercise_id AS exercise_id
FROM workouts
INNER JOIN workout_exercises ON workout_exercises.workout_id = workouts.id
INNER JOIN workout_sets ON workout_sets.workout_exercise_id = workout_exercises.id
ORDER BY workout_sets.weight DESC
),
sub_query AS (
SELECT p.user_id, MAX(weight) as weight
FROM joined_table p
GROUP BY p.user_id
),
result_set AS (
SELECT MAX(x.workout_id) AS workout_id, x.user_id, x.weight, x.workout_set_id, x.exercise_id
FROM joined_table x
JOIN sub_query y
ON y.user_id = x.user_id AND y.weight …Run Code Online (Sandbox Code Playgroud) sql activerecord ruby-on-rails active-relation ruby-on-rails-4
我正试图在Ruby on Rails中设计一个成就系统,并且遇到了我的设计/代码.
试图使用多态关联:
class Achievement < ActiveRecord::Base
belongs_to :achievable, :polymorphic => true
end
class WeightAchievement < ActiveRecord::Base
has_one :achievement, :as => :achievable
end
Run Code Online (Sandbox Code Playgroud)
迁移:
class CreateAchievements < ActiveRecord::Migration
... #code
create_table :achievements do |t|
t.string :name
t.text :description
t.references :achievable, :polymorphic => true
t.timestamps
end
create_table :weight_achievements do |t|
t.integer :weight_required
t.references :exercises, :null => false
t.timestamps
end
... #code
end
Run Code Online (Sandbox Code Playgroud)
然后,当我尝试下面的抛弃单元测试时,它会失败,因为它表示该成就为空.
test "parent achievement exists" do
weightAchievement = WeightAchievement.find(1)
achievement = weightAchievement.achievement
assert_not_nil achievement
assert_equal 500, weightAchievement.weight_required
assert_equal …Run Code Online (Sandbox Code Playgroud) 我在我的Rails(3.0)应用程序中使用自定义帮助器方法输出所需的html时遇到问题.
我在部分视图中有以下调用:_label.html.erb
<% display_resource "Diamond", @resource.diamond %>
Run Code Online (Sandbox Code Playgroud)
在resource_helper.rb文件中:
module ResourceHelper
def display_resource(display_name, value)
"<tr><td>#{display_name} </td><td>#{value.to_s}%</td></tr>" if value > 0
end
end
Run Code Online (Sandbox Code Playgroud)
预期的输出是:
<tr>
<td>Diamond</td>
<td>15%</td>
<tr>
Run Code Online (Sandbox Code Playgroud)
*授予,没有格式化,15是任意的
如果我在执行方法调用时使用<%= ...%>,它将正确输出字符串,但它不会是html(即我会看到"<tr><td>Diamond </td><td>15%</td></tr>"与"Diamond 15%"相反)
我做错了什么?
我很难搞清楚如何在rails中序列化模型的嵌套属性.我有一个RecipeTemplate,它将已存在的Recipe存储在它的template_data属性中.Recipe有两个级别的嵌套属性.
这是在rails 3.1.0.rc4上
class RecipeTemplate < ActiveRecord::Base
serialize :template_data, Recipe
...
end
class Recipe < ActiveRecord::Base
has_many :ingredients
accepts_nested_attributes_for :ingredients
...
end
Run Code Online (Sandbox Code Playgroud)
Recipe中的成分也有嵌套属性(SubIngredients).
如果我使用如下对象设置template_data:
Recipe.includes(:ingredients => [:sub_ingredients]).find(1)
Run Code Online (Sandbox Code Playgroud)
我会得到一个TypeError"无法转储匿名类Class",这是有道理的,因为它不知道如何序列化Ingredients或SubIngredients.
如何序列化模型中的嵌套属性,以便您可以使用:
serialize :template_data, Recipe
Run Code Online (Sandbox Code Playgroud)
或者我是否必须以其他方式序列化数据并自行执行类型安全检查?
在此先感谢您的帮助
我正在尝试实现我自己的GenericIdentity实现,但在尝试加载视图时我一直收到以下错误(我正在使用asp.net MVC):
System.Runtime.Serialization.SerializationException was unhandled
by user code Message="Type is not resolved for member
'OpenIDExtendedIdentity,Training.Web, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null'."
Source="WebDev.WebHost"
Run Code Online (Sandbox Code Playgroud)
我最后得到了以下课程:
[Serializable]
public class OpenIDExtendedIdentity : GenericIdentity {
private string _nickName;
private int _userId;
public OpenIDExtendedIdentity(String name, string nickName, int userId)
: base(name, "OpenID") {
_nickName = nickName;
_userId = userId;
}
public string NickName {
get { return _nickName; }
}
public int UserID {
get { return _userId; }
}
}
Run Code Online (Sandbox Code Playgroud)
在我的Global.asax中,我将cookie的序列化值读入内存流,然后使用它来创建我的OpenIDExtendedIdentity对象.经过各种各样的尝试后,我最终尝试了这种解决方案.它正常工作,直到它尝试渲染视图.
我基本上试图实现的是能够执行以下操作(使用asp.net中的默认角色管理器):
User.Identity.UserID
User.Identity.NickName
... etc.
Run Code Online (Sandbox Code Playgroud)
我已经列出了一些我试图解决这个问题的资料.有些人报告了Cassini错误,但似乎其他人已经成功实现了这种类型的自定义功能 - …
在.Net(VB更具体,但这并不重要),有没有办法通过该数字的类型将数字的格式从一种文化更改为另一种文化?
问题是:在英语中,数字是123.45.而在瑞典,这个数字将是123,45
有没有办法将123,45转换为123.45而不必将其转换为字符串(然后使用格式化方法)然后将其转换回正确的类型(单,双等)?
我正在使用jQuery在页面加载时动态添加两个div.这一切都很好,除了当我单击第一个动态加载的div中的"高级选项"链接时 - 它执行它的正确行为(滑动第二个动态div),但它将窗口的滚动重置回顶部.我试图专注于我滑开的div的第一个输入元素,但无济于事.
如何摆脱这种不受欢迎的滚动行为?
我已经包含了帮助的代码(尽可能长的啰嗦)
<style type="text/css">
.itemcontainer {
background-color:#FFFFCC;
border:1px solid #999999;
height:auto;
margin:1em 0;
overflow:hidden;
position:relative;
width:600px;
}
.itemcontainer .optionpopoutcontainer {
background-color:#44CC55;
bottom:0;
color:#333333;
height:auto;
left:0;
padding:6px;
position:absolute;
width:100%;
}
.itemcontainer .advancedpopoutcontainer {}
</style>
Run Code Online (Sandbox Code Playgroud)
这里是javascript和HTML
<script type="text/javascript">
$(document).ready(function(){
var counter = 0;
//Add the necessary divs to the classes
$(".itemcontainer").each(function(){
var id = $(this).find("input[name='ItemID']").attr('value');
$(this).append("<div class='optionpopoutcontainer' id='quickaddcontainer-" + id + "'></div><div class='advancedpopoutcontainer' id='advancedaddcontainer-" + id + "'></div>");
});
$(".optionpopoutcontainer").css("display", "none"); //used for the sliding up
$(".optionpopoutcontainer").each(function(){ …Run Code Online (Sandbox Code Playgroud) 我想从控制器中提取逻辑到可能更干的地方.在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的新手,所以如果这是一个愚蠢的问题/语法不正确,请原谅我.提前致谢!
我正在通过Author hasMany Books示例进行工作,并尝试运行sequelize-cli迁移,但是在运行以下迁移时遇到以下问题:
ERROR: relation "authors" does not exist
Run Code Online (Sandbox Code Playgroud)
这是创建作者的第一个迁移:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Authors', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
},
dateOfBirth: {
type: Sequelize.DATEONLY
},
dateOfDeath: {
type: Sequelize.DATEONLY
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Authors');
}
};
Run Code Online (Sandbox Code Playgroud)
第二次迁移创建一本书: …
activerecord ×3
asp.net-mvc ×2
ruby ×2
.net ×1
abstraction ×1
achievements ×1
controllers ×1
god-object ×1
html-helper ×1
jquery ×1
localization ×1
mocha.js ×1
openid ×1
postgresql ×1
refactoring ×1
scroll ×1
sequelize.js ×1
sql ×1