小编Rah*_*ava的帖子

重定向后Rails会话不会持久化

我正在使用会话存储将数据保存到会话中.我的initializers/session_store.rb看起来像:

::Application.config.session_store :active_record_store
Run Code Online (Sandbox Code Playgroud)

将数据添加到会话代码:

book = Book.find(1)
session[:abc] = book
Run Code Online (Sandbox Code Playgroud)

我在不同的页面访问此会话数据.访问会话数据:

book = session[:abc]
Run Code Online (Sandbox Code Playgroud)

问题是我的会话数据没有在重定向之间保留.可能是什么问题呢?

我可以看到我的会话正在按预期保存数据,但是当重定向发生时它会丢失一些数据,如果再次重定向则会丢失更多数据.令人沮丧的是.

session ruby-on-rails ruby-on-rails-4

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

传递多个变量以在rails cotroller中渲染json

我试图将数据从控制器传递给javascript.这是你如何做到的,

respond_to do |format|
  format.html
  format.json { render json: {data: @data} }
end
Run Code Online (Sandbox Code Playgroud)

然后在您的视图文件中,您应该这样做:

<%= javascript_tag do%>
  window.data = <%= raw @data.to_json %>
<%end%>

<script>
  for( i = 0; i < data.length; i++ ) {
    alert(data[i]);
  }
</script>
Run Code Online (Sandbox Code Playgroud)

合理.对?

但是,上面的代码是在json代码中只传递一个变量,即数据变量.我需要做的是将多个变量传递给我的javascript代码.

应该这样做:

respond_to do |format|
  format.html
  format.json { render json: {data: @data, data1: @data1, data2: @data2} }
end
Run Code Online (Sandbox Code Playgroud)

现在, - 我应该如何访问视图文件中的data1和data2变量? - 我需要修改window.data吗?我尝试了下面的代码但它没有成功.给我参数错误.

<%= javascript_tag do%>
  window.data = <%= raw @data.to_json, @data1.to_json %>
<%end%>
Run Code Online (Sandbox Code Playgroud)

任何线索将不胜感激.

干杯!

javascript json ruby-on-rails ruby-on-rails-4

4
推荐指数
1
解决办法
3228
查看次数

slow std :: map for large entries

我们有48,16,703个这种格式的条目.

1 abc
2 def
...
...
4816702 blah
4816703 blah_blah
Run Code Online (Sandbox Code Playgroud)

由于条目数量非常大,我担心std :: map在插入过程中会花费很多时间,因为它需要为每次插入进行平衡.

只将这些条目插入地图需要花费大量时间.我在做

map[first] = second;
Run Code Online (Sandbox Code Playgroud)

两个问题:1.我是否正确使用std :: map来处理这类案件?我是否正确插入如上所述.或者我应该使用map.insert()

我很抱歉没有做实验并写出绝对数字,但如果我们做的是正确的话,我们希望得到普遍的共识.

此外,他们的钥匙不是连续的..

PS当然,稍后我们还需要访问该地图以获取与键对应的值.

c++ performance hashmap

4
推荐指数
2
解决办法
200
查看次数

std :: vector增加峰值内存

这是我最后一个问题的延续。我无法理解向量占用的内存。问题骨架:

考虑一个向量,它是列表的集合,而列表是指针的集合。就像:

std::vector<std::list<ABC*> > vec;
Run Code Online (Sandbox Code Playgroud)

ABC是我的班级。我们在64位计算机上工作,因此指针的大小为8个字节。

在项目流程的开始,我将此向量的大小调整为一个数字,以便可以将列表存储在各个索引处。

vec.resize(613284686);
Run Code Online (Sandbox Code Playgroud)

此时,向量的容量和大小将为613284686。对。调整大小后,我将列表插入相应的索引为:

// Some where down in the program, make these lists. Simple push for now.
std::list<ABC*> l1;
l1.push_back(<pointer_to_class_ABC>);
l1.push_back(<pointer_to_class_ABC>);

// Copy the list at location
setInfo(613284686, l1);

void setInfo(uint64_t index, std::list<ABC*> list>) {
  std::copy(list.begin(), list.end(), std::back_inserter(vec.at(index));
}
Run Code Online (Sandbox Code Playgroud)

好的。这样插入就完成了。值得注意的是:

向量的大小为:613284686向量中的条目为:3638243731 //通过遍历向量索引并在每个索引处添加std :: lists的大小来计算得出。

现在,由于有3638243731个指针条目,因此我希望此向量占用的内存约为30Gb。3638243731 * 8(字节)=〜30Gb

但是但是当我将这些数据存储在内存中时,内存峰值将达到400G。

然后我用以下方法清除此向量:

std::vector<std::list<nl_net> >& ccInfo = getVec(); // getVec defined somewhere and return me original vec.
std::vector<std::list<nl_net> >::iterator it = ccInfo.begin();
for(; it != ccInfo.end(); ++it) { …
Run Code Online (Sandbox Code Playgroud)

c++ vector

4
推荐指数
1
解决办法
120
查看次数

如果在咖啡脚本中

伙计们,

我的html中有两个文本框.我想用咖啡脚本比较他们的价值观.虽然我已经开始搜索它,但我确信我正在做预期的事情,但我仍然看到一种奇怪的行为.

事情是:

可以说,我有两个文本框,其id为"title"和"author".除此之外,我还有一个onclick触发咖啡脚本功能的按钮.

我的咖啡脚本功能如下:

check_fields = ->
  elem_book_title  = $("#title").val()
  elem_book_author = $("#author").val()
  alert(elem_book_title)
  alert(elem_book_author)
  if not elem_book_title? 
    alert("title is null")
  else if not elem_book_author?
    alert("author is null")
  else
    alert("both are ok")
Run Code Online (Sandbox Code Playgroud)

情况是,如果我只在我的"标题"文本框中输入内容,它应该提醒我"作者为空".对?但令人惊讶的是,它提醒我"两者都可以".预计?或者我错过了什么?

javascript jquery coffeescript

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