0

最初我创建了练习来浏览。然后我添加了针对它们记录“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"}

我现在添加了需要将其与用户关联的要求。我不确定如何以最好的方式做到这一点。这现在正在发布到锻炼控制器,锻炼并没有真正与用户相关联。所以在练习控制器中,我可以合并参数,但这似乎很骇人。

正确的方法是通过用户创建日志条目关联,对吗?但是我将如何重组表格以使其发挥作用?

我可能不应该再使用运动控制器了,因为它正在创建 log_entries,然后在 LogEntryController 中可以通过那里设置用户......但是最好的方法是什么?出于某种原因,我无法弄清楚如何将锻炼传递给 log_entries 控制器,然后以如图所示的形式呈现集合。

也许我整天都因为编码而大脑大便。谢谢!

我正在使用Cocoon库来添加关联功能。

4

1 回答 1

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和是什么。URI 的资源部分看起来像这样,例如:exerciselog_entry

/users/1/exercises/1/log_entries/new

请注意,您应该提交的是 log_entry 表单,而不是练习表单。

而且您不必对 log_entry 表单做任何特别的事情。由于模型之间存在关系并且路由是嵌套的,因此您可以简单地访问控制器操作中的 and 并将它们分配给那里的新params[:user_id]对象。params[:exercise_id]log_entrylog_entry

于 2012-08-11T09:15:27.793 回答