当我尝试通过paperclip gem为我的用户模型(在avatar属性下)上传图像时,我意识到了一些非常奇怪的事情.出于某种原因,User.update和@ user.update_attributes的行为有所不同.有谁知道为什么会这样?
#using @user.update_attributes(user_avatar_params)
def update_profile_pic
@user = User.find(params[:id])
@user.update_attributes(user_avatar_params)
puts @user.avatar_file_name.nil? # prints false as expected
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
#using User.update(@user.id, user_avatar_params)
def update_profile_pic
@user = User.find(params[:id])
User.update(@user.id, user_avatar_params)
puts @user.avatar_file_name.nil? # prints true although successfully saves
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
Run Code Online (Sandbox Code Playgroud)
这是我在user_controller.rb中的强大参数
def user_avatar_params
params.require(:user).permit(:avatar)
end
Run Code Online (Sandbox Code Playgroud)
UPDATE
因此,在收到提示和令人敬畏的回复后,这就是我所学到的:
User.update
返回结果对象是否已成功保存到数据库.因此,User.update(@user.id, user_avatar_params)
如果您不进行分配,则不会更新@user变量.@user.update_attributes(user_avatar_params)
会隐式更改@user变量.
使用update方法的解决方案就是这样做
@user = User.update(@user.id, user_avatar_params)
我正在制作一个拖放JavaScript引擎.我学会了如何将边界框设置为父元素.但是,现在我希望将边界框设置为任何父级的任何父级,或者设置为整个页面(无边界).
现在我的Javascript引擎看起来像:
// JavaScript Document
var dragObj;
document.addEventListener("mousedown", down, false);
function down(event) {
if(~event.target.className.search(/drag/)) {
dragObj = makeObj(event.target);
dragObj.element.style.zIndex="100";
document.addEventListener("mousemove", freeMovement, false);
}
}
function freeMovement(event) {
if (typeof(dragObj.element.mouseup) == "undefined")
document.addEventListener("mouseup", drop, false);
//Prevents redundantly adding the same event handler repeatedly
dragObj.element.style.left = Math.max(0, Math.min(event.clientX - dragObj.posX, dragObj.boundX)) + "px";
dragObj.element.style.top = Math.max(0, Math.min(event.clientY - dragObj.posY, dragObj.boundY)) + "px";
}
function drop() {
dragObj.element.style.zIndex="1";
document.removeEventListener("mousemove", freeMovement, false);
document.removeEventListener("mouseup", drop, false);
//alert("DEBUG_DROP");
}
function makeBoundlessObj(e) {
var obj = new …
Run Code Online (Sandbox Code Playgroud) 我制造了原始战舰,现在我正在寻求将我的AI从随机猜测升级到统计上猜测位置.我无法在线查找算法,所以我的问题是这个应用程序已经存在哪种算法?我将如何实现一个?
船舶:5,4,3,3,2
场地:10X10
板:
OCEAN = "O"
FIRE = "X"
HIT = "*"
SIZE = 10
SEA = [] # Blank Board
for x in range(SIZE):
SEA.append([OCEAN] * SIZE)
Run Code Online (Sandbox Code Playgroud)
如果你想看到其余的代码,我在这里发布:(https://github.com/Dbz/Battleship/blob/master/BattleShip.py); 我不想用很多不相关的代码来混淆这个问题.
我编写了一些功能规范来测试通过我的rails应用程序登录,并且规范都在本地传递,但是当Travis CI运行它们时它们会失败.这是一个例子:
1) User Registration User signs up with valid credentials
Failure/Error: fill_in 'Username', with: 'dannnnneh'
Capybara::ElementNotFound:
Unable to find field "Username"
# ./spec/features/registrations_controller_spec.rb:8:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
我读到了Travis CI使用的常见构建问题Capybara.default_wait_time = 15
; 但是,我要么把它放在错误的地方,要么就行不通.
示例规格:
scenario 'User signs up with valid credentials' do
Capybara.default_wait_time = 15
visit '/users/sign_up'
fill_in 'Username', with: 'dannnnneh'
...
Run Code Online (Sandbox Code Playgroud)
编辑:
我也试图把Capybara.default_wait_time = 15
在rails_helper.rb
,spec_helper.rb
,spec/support/capybara.rb
.
.travis.yml
由于这个问题,我还添加了以下内容.
script:
- xvfb-run bundle exec …
Run Code Online (Sandbox Code Playgroud) 我在JavaScript中制作拖放引擎,我不知道如何设置dragObj的正确位置,因为它根据父元素的定位类型而改变(dragObj是否也根据其父元素的"父元素"而改变"等等?).
所以,我的dragObj看起来像这样:
function makeObj(event) {
var obj = new Object();
var e = event.target;
obj.element = e;
obj.boundElement = null;
while(e = e.parentNode) {
if(~e.className.search(/bound/)) { //if(/bound/.test(e.className)) {
obj.boundElement = e;
break;
}
}
if(obj.boundElement == null)
obj.boundElement = document.body;
// I would like to find the correct minimum bounds with findPos(); however, I need
// findPos() to work with every type of positioning (absolute, relatice, ect.)
//var elemPos = findPos(obj.boundElement);
//obj.minBoundX = elemPos.x;
//obj.minBoundY = elemPos.y;
obj.minBoundX = obj.boundElement.offsetLeft …
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个chrome扩展程序,它将搜索给定页面的不同缓存数据库.但是,它没有像我期望的那样工作.
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
var x;
var img = document.getElementsByTagName("img");
for(x in img) {
img[x].addEventListener('click',openPage, false);
}
function openPage(event) {
alert("clicked");
var e = event.target;
switch(e.alt) {
case "WayBack Machine":
chrome.tabs.update(tab.id, { url: "http://wayback.archive.org/web/*/" + tab.url });
break;
case "Google Cache":
if(tab.url.substring(0, 5) == "http:")
chrome.tabs.update(tab.id, { url: 'http://webcache.googleusercontent.com/search?q=cache:' + tab.url.substr(7) });
else if(tab.url.substring(0,6) == "https:")
chrome.tabs.update(tab.id, { url: 'http://webcache.googleusercontent.com/search?q=cache:' + tab.url.substr(8) });
break;
case "Yahoo Cache":
// Need the yahoo cache url
break;
case "Bing Cache": …
Run Code Online (Sandbox Code Playgroud) javascript json google-chrome javascript-events google-chrome-extension
我如何遍历数字列表,以及有多少不同的方法可以做到这一点?
我认为会起作用:
#include <cstdlib>
#include <iostream>
#include <list>
using namespace std;
int main()
{
int numbers[] = {2, 4, 6, 8};
int i = 0;
for(i=0; i< numbers.size();i++)
cout << "the current number is " << numbers[i];
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在for循环行上遇到错误:
请求部件
'size'
中'numbers'
,其是非类类型的'int[4]'
我收到了一些错误,[E1]"C++需要所有声明的类型说明符",[E2]"使用未声明的标识符"和[E3]"预期的类名或命名空间".
#ifndef MAIN_SAVITCH_SEQUENCE_H
#define MAIN_SAVITCH_SEQUENCE_H
template <class T>
class sequence
{
public:
// TYPEDEFS and MEMBER CONSTANTS
typedef T value_type;
static const int CAPACITY = 30;
// CONSTRUCTOR
sequence( );
// MEMBER FUNCTIONS
void showSequence();
void attach(value_type entry);
value_type current( );
void remove_current( );
int size( );
private:
value_type data[CAPACITY];
int used;
};
template <class T>
[E3] sequence::sequence( )
{
[E2] used = 0;
}
template <class value_type>
[E3] void sequence::attach(value_type entry)
{
data[used++] = entry;
}
sequence::value_type sequence::current( ) …
Run Code Online (Sandbox Code Playgroud)