Jquery Rails-嵌套表单-随机化用户发布的所有单个字段

Jquery Rails-嵌套表单-随机化用户发布的所有单个字段,jquery,ruby-on-rails,ruby,sqlite,ruby-on-rails-4,Jquery,Ruby On Rails,Ruby,Sqlite,Ruby On Rails 4,用户可以通过post创建,通过单击“添加文本”按钮[new.html.erb],动态添加任意数量的嵌套文本字段 例如,如果用户创建包含三个文本字段的帖子 (Text1 text2text3) 然后是另一篇包含三个文本字段的文章 (TextA TextB TextC) 这将在浏览器[index.html.erb]中显示为:或由于.order(“RANDOM()”[索引操作] 但是,我试图输出用户发布的所有文本字段的随机列表。例如,我想整体输出和随机化(Text1 text2text3texta

用户可以通过post创建,通过单击“添加文本”按钮[new.html.erb],动态添加任意数量的嵌套文本字段

例如,如果用户创建包含三个文本字段的帖子 (Text1 text2text3

然后是另一篇包含三个文本字段的文章 (TextA TextB TextC

这将在浏览器[index.html.erb]中显示为:或由于.order(“RANDOM()”[索引操作]

但是,我试图输出用户发布的所有文本字段的随机列表。例如,我想整体输出和随机化(Text1 text2text3textatextbtextc)。换句话说,我的目标是分别输出所有文本字段的随机组合(TextA Text2 TextC Text1 text3textb

我无法通过我的索引操作index.html.erb

<@posts.each do |post| %>
 <% post.things.each do |thing| %>

  <%= thing.try(:text) %>

 <% end %>
<% end %>
任何帮助都将是惊人的!谢谢大家!

new.html.erb

<button id='addtext'>text</button>

<%= form_for @post, html: { multipart: true } do |f| %>
 <%= f.fields_for :things do |ff| %>
 <% end %> 
  <%= f.submit %>
<% end %>
class PostsController < ApplicationController

  def index
     @posts = Post.includes(:things).all.order("RANDOM()")
  end 

end
ActiveRecord::Schema.define(version: 20160227154831) do

create_table "posts", force: :cascade do |t|
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
end

create_table "taggings", force: :cascade do |t|
 t.integer  "tag_id"
 t.integer  "taggable_id"
 t.string   "taggable_type"
 t.integer  "tagger_id"
 t.string   "tagger_type"
 t.string   "context",       limit: 128
 t.datetime "created_at"
end

  add_index "taggings", ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], name: "taggings_idx", unique: true
  add_index "taggings", ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context"

create_table "tags", force: :cascade do |t|
 t.string  "name"
 t.integer "taggings_count", default: 0
end

add_index "tags", ["name"], name: "index_tags_on_name", unique: true

create_table "things", force: :cascade do |t|
 t.text     "text"
 t.integer  "post_id"
 t.datetime "created_at",         null: false
 t.datetime "updated_at",         null: false
 t.integer  "order"
end

end
你试过这个吗

class PostsController < ApplicationController

  def index
     @posts = Post.includes(:things).find(:all, :order =>"RANDOM()", :limit => 10)
  end 

end
class PostsController“RANDOM()”,:limit=>10)
结束
结束
MySQL也使用RAND()而不是RANDOM()

您可以尝试以下内容
posts\u controller.rb

   class PostsController < ApplicationController

    def index
      @things = Thing.all
    end 

   end
class PostsController
在index.html.erb中

    <% @things.shuffle.each do |thing| %>

     <%= thing.try(:text) %>

   <% end %>

不确定我是否理解正确,但如果您希望当前用户的所有内容都随机排序,这将起作用:

class PostsController < ApplicationController
  def index
    @things = Thing.joins(post: :user).where(users: { id: current_user.id }).order("RANDOM()")
  end 
end
class PostsController
在DB中进行洗牌(=随机排序)也比在ruby中进行洗牌更可取,因为它速度更快


编辑:更优雅地说,您可以添加一个has_many:through关系,通过执行current_user.things直接访问当前用户的内容。然而,我把这个练习留给你…;-)

嗨-谢谢你的帮助!不幸的是,这导致了这个错误:“找不到所有具有'id'的帖子:(all,{:order=>“RANDOM()”,:limit=>10})(找到0个结果,但正在查找2)“嗯。如果您在SQLite或MySQL上,是否尝试使用RAND()而不是RANDOM?”。也可以按偏移量使用它。请参阅目前正在使用SQLite-仍然不走运-感谢您的链接!嗨-这不起作用:(-谢谢你的反馈!