2016-03-02 14 views
1

用戶可以通過發佈創建任意數量的嵌套文本字段,只要點擊「添加文本」按鈕即可隨時添加[new.html.erb ]Rails - 嵌套表單 - 隨機分配用戶發帖的所有單個字段

如果用戶,例如,創建一個具有三個文本字段 上的柱(文本1文本2文本3

enter image description here

然後另一個交與三個文本字段 (TEXTA TEXTB TextC

enter image description here

這將在瀏覽器當前顯示的[index.html.erb如任一:http://imgur.com/Nd0Erybhttp://imgur.com/rl0m60U由於.order( 「RANDOM()」)[索引行動]

但是,我想輸出用戶帖子的所有文本字段的隨機列表。例如,我想輸出&隨機結束(Text1 Text2 Text3 TextA TextB TextC)。換句話說,我的目標是輸出的所有文本字段的隨機分類單獨(TEXTA文本2 TextC文本1文本3 TEXTB

我不能讓這個通過我的索引操作 & 指數工作。 html.erb

任何幫助將是驚人的!謝謝!

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 %> 

posts_controller.rb

class PostsController < ApplicationController 

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

end 

index.html.erb

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

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

<% 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 

回答

0

你可以嘗試以下
posts_controller.rb

class PostsController < ApplicationController 

    def index 
     @things = Thing.all 
    end 

    end 
index.html中

。ERB

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

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

    <% end %> 
+0

嗨 - 這沒有工作:( - 謝謝您的反饋,但! – domburford

+0

歡迎。請嘗試更新代碼請輸入 –

+0

完美!MASSIVE謝謝! – domburford

0

您是否嘗試過這個?

class PostsController < ApplicationController 

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

end 

此外,MySQL使用RAND()而不是RANDOM()。

+0

嗨,謝謝你的幫助!不幸的是,這會導致這個錯誤:「找不到所有帶有'id'的帖子:(al​​l,{:order =>」RANDOM()「,:limit => 10})(找到0個結果, )「 – domburford

+0

嗯。如果您使用SQLite或MySQL,您是否嘗試使用RAND()而不是隨機數。你也可以通過偏移來使用它。看到[這裏](http://stackoverflow.com/questions/27002114/displaying-a-random-database-item-to-view-rails) – mutantkeyboard

+0

此刻使用SQLite - 仍然沒有運氣 - 感謝您的鏈接! – domburford

1

不知道如果我理解正確的,但如果你想爲當前用戶所有的東西,排序隨機,這將工作:

class PostsController < ApplicationController 
    def index 
    @things = Thing.joins(post: :user).where(users: { id: current_user.id }).order("RANDOM()") 
    end 
end 

洗牌的DB(=訂貨隨機)是也更喜歡用紅寶石洗牌,因爲它更快。

編輯:更優雅的是,您可以添加has_many:through關係,以便能夠通過執行current_user.things來直接訪問current_user的東西。不過,我把這個練習留給你... ;-)

相關問題