小编Dbz*_*Dbz的帖子

Rails Paperclip:update与update_attributes

当我尝试通过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)

ruby-on-rails paperclip

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

如何在javascript中为我的可拖动对象设置"边界"区域?

我正在制作一个拖放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)

html javascript css drag-and-drop

18
推荐指数
1
解决办法
1万
查看次数

如何为战舰中的船只生成统计上可能的位置

我制造了原始战舰,现在我正在寻求将我的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); 我不想用很多不相关的代码来混淆这个问题.

python algorithm math statistics

18
推荐指数
1
解决办法
3072
查看次数

规范在本地传递,但Travis CI失败

我编写了一些功能规范来测试通过我的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 = 15rails_helper.rb,spec_helper.rb,spec/support/capybara.rb.

.travis.yml由于这个问题,我还添加了以下内容.

script:
    - xvfb-run bundle exec …
Run Code Online (Sandbox Code Playgroud)

ruby rspec ruby-on-rails capybara travis-ci

12
推荐指数
1
解决办法
2259
查看次数

如何创建一个函数来查找元素的坐标,而不管它的位置如何?

我在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)

html javascript css drag-and-drop

8
推荐指数
2
解决办法
1017
查看次数

在chrome扩展中使用时,addEventListener不会触发

我正在尝试制作一个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

5
推荐指数
2
解决办法
2万
查看次数

如何迭代c ++中的数字列表

我如何遍历数字列表,以及有多少不同的方法可以做到这一点?

我认为会起作用:

#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]'

c++

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

错误"C++需要所有声明的类型说明符"

我收到了一些错误,[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)

c++ templates c++11

2
推荐指数
1
解决办法
5292
查看次数