最初我创建了要浏览的练习。然后我添加了记录“log_entries”的能力。
这适用于那个
= semantic_form_for @exercise do |exercise|
= exercise.semantic_fields_for :log_entries do |log_entry|
= render 'log_entries/log_entry_fields', :f => log_entry
.links
= link_to_add_association 'Add Set', exercise, :log_entries, :partial => "log_entries/log_entry_fields", :data => {:role => "button", :icon => "plus"}
= exercise.buttons do
= exercise.commit_button "Apply", :button_html => {:data => {:icon => "check", :theme => "b"}}
= link_to "Cancel", "", :data => {:rel => "back", :icon => "delete", :role => "button", :theme => "a"}
我现在添加了将其与用户关联的要求。我不确定如何以最好的方式做到这一点。这是现在发布到运动控制器,并且练习与用户实际上没有关联。因此,在运动控制器中,我可以将参数合并,但这似乎是hackish。
正确的方法是通过用户创建日志条目关联,对吧?但是,我如何重组表单以使其发挥作用?
我可能不应该再使用运动控制器,因为它正在创建log_entries,然后在LogEntryController中用户可以通过那里设置......但是最好的方法是什么?出于某种原因,我无法弄清楚如何将锻炼传递给log_entries控制器,然后让集合以所示的形式呈现。
也许我整天都在编码。谢谢!
我正在使用Cocoon库来添加关联功能。
答案 0 :(得分:0)
你不需要宝石来完成这个任务。考虑以下关联:
class User < ActiveRecord::Base
has_many :log_entries
end
class Exercise < ActiveRecord::Base
has_many :log_entries
end
class LogEntry < ActiveRecord::Base
belongs_to :user
belongs_to :exercise
end
以下深层嵌套的路线:
YourApp::Application.routes.draw do
resources :users do
resources :exercises do
resources :log_entries
end
end
end
这会导致新链接看起来像这样(很久,我知道):
<%= link_to new_user_exercise_log_entry_path(user, exercise) %>
其中user
和exercise
是log_entry
所属的用户和锻炼对象。您的URI的资源部分看起来像这样,例如:
/users/1/exercises/1/log_entries/new
请注意,这是您应该提交的log_entry表单,而不是练习表单。
您不必对log_entry表单执行任何特殊操作。由于模型之间存在关系,并且路由是嵌套的,因此您只需访问params[:user_id]
控制器操作中的params[:exercise_id]
和log_entry
,并将它们分配给新的log_entry
对象那里。