如何在实例变量中为每个对象创建一个form_? Rails 4

时间:2015-06-21 03:29:33

标签: ruby-on-rails ruby-on-rails-4

在我的Rails应用程序中,每个用户都有许多图表,每个图表都有许多可跟踪的图表,每个用户都有很多点(有值和时间)。用户可以添加(或删除)不同的可跟踪到绘图与created_at时间。用户可以转到图表的显示页面并提交表单,为图表中的每个可跟踪的内容创建新点。

在GraphController show动作中,我将当前图形的所有可跟踪项分配给@trackables,然后在views / graphs / show中循环遍历每个| trackable |。并试图为可跟踪的新点。

===============

编辑:这是在尝试访问图表显示页面时在浏览器中引发的错误

图表中的NoMethodError#show undefined方法`trackable_points_path'对于#<#:0x007fbce1548008>

然后此行在浏览器的“提取的来源”中突出显示

- simple_form_for([trackable, trackable.points.build]) do |f|

=====

编辑2:这是我要求的路线

Rails.application.routes.draw do
  devise_for :users
  resources :graphs do
    resources :trackables do
      resources :points
    end
  end
  root 'graphs#index'
end

模特

class Graph < ActiveRecord::Base
  belongs_to :user
  has_many :trackables
end

class Trackable < ActiveRecord::Base
  belongs_to :graph
  has_many :points
end

class Point < ActiveRecord::Base
  belongs_to :trackable
end

图形和(更新的)点控制器

   class GraphsController < ApplicationController
     def show
       @graph = Graph.find(params[:id])
       @trackables = @graph.trackables.all
     end
   end

  class PointsController < ApplicationController
  def create
    @trackable = Trackable.find(:trackable_id)
    @point = @trackable.points.create(params.require(:point).permit(:value))
  end
end

视图/图形/ show.html.haml

- @trackables.each do |trackable|   
  - simple_form_for([trackable, trackable.points.build]) do |f|
    = f.input :value, input_html: { class: "form-control" }
    = f.button :submit, class: "btn btn-default"  

我对这一切都不熟悉,我的尝试似乎无法奏效。任何帮助或建议阅读将不胜感激!感谢

1 个答案:

答案 0 :(得分:0)

我认为这里的问题是您直接在表单中访问UPDATE forums_posts p SET post = REPLACE(post, 'hep', 'help') WHERE EXISTS (SELECT 1 FROM Topics t WHERE p.topic_id = t.tid AND t.forum_id = 3 ); 对象这一事实,但如果没有访问Trackable,您就没有真正的路径来处理Trackable第一。 IE浏览器。您有Graphgraph_trackables_path()方法,但没有graph_trackable_points_path()方法。

您可能应该将trackable_points_path()对象传递给@graph来电:

simple_form_for

否则,您可以将- simple_form_for([@graph, trackable, trackable.points.build]) do |f| ... 对象定义为Trackable文件中的单独资源,但这可能会修改控制器中的基础逻辑。

routes.rb