2011-09-27 47 views
1

作爲我的Rails 3應用程序的一部分,我希望用戶能夠點擊其他個人資料/頁面上的鏈接並添加鏈接的字符串值到屬於該用戶個人資料的數組。Rails 3數組 - 添加具有類別的項目,然後列出項目類別

具體來說,我期望做的是爲每個配置文件填充:todos的列表,具體取決於他們點擊哪個todo。這個想法是,每個todo將屬於兩類之一:內部和外部。因此,點擊鏈接會將todo的值推送到內部或外部。然後,用戶的個人資料將在內部和外部顯示:todos的列表,並計算該用戶個人資料的總計todos

由於我是編程的初學者,因此我在這裏得到了一些關於設置這方面的幫助;但是我需要一些幫助來完成它。我似乎無法連接所有的點。我建立了一個連接模型,但無法添加待辦事項的字符串值,然後在配置文件中列出/計算它。這裏是我的代碼:

profile.rb型號:

class Profile < ActiveRecord::Base 
    belongs_to :user 
    accepts_nested_attributes_for :user 

    has_many :profile_todos 
    has_many :todos, :through => :profile_todos 

    def add_todo_inside_item(item) 
    self.profile_todos.build :category => 'inside' 
    end 

    def add_todo_outside_item(item) 
    self.profile_todos.build :category => 'outside' 
    end 
end 

todo.rb型號:

class Todo < ActiveRecord::Base 
    belongs_to :profile 
end 

profile_todo.rb型號:

class ProfileTodo < ActiveRecord::Base 
    belongs_to :profile 
    belongs_to :todo 
end 

_create_todos.rb遷移:

class CreateTodos < ActiveRecord::Migration 
    def self.up 
    create_table :todos do |t| 
     t.string :name 

     t.timestamps 
    end 
    end 

_create_profile_todos.rb遷移:

class CreateProfileTodos < ActiveRecord::Migration 
    def self.up 
    create_table :profile_todos do |t| 
     t.string :category 
     t.integer :profile_id 

     t.timestamps 
    end 
    end 

清單用戶的配置文件的待辦事項:

<div id="todos"> 
    <p><%= @profile.first_name %>&nbsp;has&nbsp;<%= pluralize(@profile.profile_todos.count, 'goal') %>.</p> 
    <div id="todo-list"> 
    <div class="todos_inside"> 
     <p><%= @profile.profile_todos(:category => 'inside' %>.</p> 
    </div> 
    <div class="todos_outside"> 
     <p><%= @profile.profile_todos(:category => 'outside' %>.</p> 
    </div> 
    </div> 
</div> 

對方法add_item @親file.todos:

<li><%= link_to "#", :class => 'button white' do %><%= @user.profile.stringtoadd %><% end %></li> 

回答

0

你最好指着一些動作遠程鏈接,這樣你就可以操縱你的待辦事項而無需刷新頁面。從文檔:

:遠程=>真實的 - 這將允許非侵入式JavaScript司機 使問題Ajax請求的URL,而不是下面的鏈接 的。每個驅動器的監聽 完成的Ajax請求並執行JavaScript的操作 提供機制,一旦他們完成

至於其他問題,您可以定義您將用於顯示和統計對象範圍:

http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html

+0

謝謝。你能提供一個代碼示例,它可以與我在更新中包含的'link_to'一起使用嗎? – tvalent2

1

正如@socjopata提到的,你會需要某種控制器action來管理你的ProfileTodo記錄的創建和建設。由於您已經創建了一個ProfileTodo加入模型,請繼續並創建一個ProfileTodosController

更多關於控制器: http://guides.rubyonrails.org/action_controller_overview.html

link_to標記應然後對create動作遠程調用。爲了使一切正常工作,您很可能需要爲控制器提供profile_idtopic_id以便進行正確的RESTful事務,這意味着您必須爲您的link_to標記提供參數散列,如果您使用url_options,可能會變得雜亂。

看看傳遞url_options: http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

最終,你正在創建一個新的ProfileTodo紀錄,所以我認爲這將是正在進行的工作的一個更好的描述,如果你使用的form_for標籤有隱藏字段爲profile_idtopic_id。您還可以通過與:remote => true

假設你做一個伴隨控制器和添加RESTful資源到您的config/routes.rb文件供他們做出形式遙遠的軌道,你的每一個單獨話題的形式會是這個樣子:

<%= form_for(profile_todo_path, :remote=> true) do |f| %> 
    <%= f.hidden_field_tag :profile_id, :value => @user.profile.id %> 
    <%= f.hidden_field_tag :topic_id, :value => topic.id %> 
    <%= f.submit_tag topic.name %> 
<% end %> 

你可以隨時設計你的表格,所以如果你只想顯示一個鏈接,那應該是可行的:)

+1

或者他可以建立一個鏈接,使用簡單的link_to helper來觸發通過javascript提交表單:) – socjopata