作为我的Rails 3应用程序的一部分,我希望用户能够点击其他个人资料/页面上的链接,并将链接的字符串值添加到属于该用户个人资料的数组中。
具体来说,我要做的是为每个配置文件填充:todos
的列表,具体取决于他们点击的todo
。我们的想法是每个todo
都属于以下两个类别之一:内部和外部。因此,单击链接会将todo
的值推到内部或外部。然后,用户的个人资料将显示内部和外部的:todos
列表,并计算该用户个人资料的todos
总计。
因为我是编程的初学者,所以我在这里得到了一些关于设置它的帮助;但是我需要一些帮助来完成它。我似乎无法连接所有的点。我已经设置了一个连接模型但是无法添加todo的字符串值,然后在配置文件中列出/计算它。这是我的代码:
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 %> has <%= 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到@ profile.todos:
<li><%= link_to "#", :class => 'button white' do %><%= @user.profile.stringtoadd %><% end %></li>
答案 0 :(得分:1)
正如@socjopata所提到的,您将需要某种控制器action
来管理ProfileTodo
记录的创建和构建。由于您已经创建了ProfileTodo
联接模型,因此请继续创建ProfileTodosController
。
有关控制器的更多信息: http://guides.rubyonrails.org/action_controller_overview.html
然后,您的link_to
代码应远程调用create
操作。为了使一切正常工作,您很可能需要为控制器提供profile_id
和topic_id
才能进行正确的RESTful事务,这意味着您必须提供您的link_to
标记的参数哈希,如果您使用url_options,可能会变得有点混乱。
看看传递url_options: http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
最终,您正在创建一个新的ProfileTodo
记录,因此如果您使用form_for
标记隐藏了{{1}的字段,我认为这将更好地描述正在完成的工作}和profile_id
。您还可以通过向其提供topic_id
假设您制作了一个附带的控制器并将RESTful资源添加到:remote => true
文件中,那么每个主题的表单将如下所示:
config/routes.rb
您可以随时设置表单样式,因此如果您只想显示链接,那应该是可行的:)
答案 1 :(得分:0)
您需要一个指向某个操作的远程链接,这样您就可以在不刷新页面的情况下操纵您的待办事项。来自文档:
:remote =&gt; true - 这将允许不显眼的JavaScript驱动程序 向有问题的URL发出Ajax请求,而不是关注 链接。每个驱动程序都提供了监听的机制 完成Ajax请求并执行JavaScript操作 一旦他们完成了
至于另一个问题,您可以定义用于显示和计算对象的范围:
http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html