2015-08-24 129 views
0

我是新来的Ruby on Rails的,我使用Rails 4.1.9,2.0.0的Ruby在Windows XP上如何将变量传递给部分?

这是我的模型

class Migproject < ActiveRecord::Base 
    validates :name, presence: true 
     validates :clientname, presence: true 
     validates :startdate, presence: true 
     #validates :enddate, presence: true 
     validates :is_active, presence: true 
     validates :statusid, presence: true 

     has_many :projectmembers, dependent: :destroy 
     accepts_nested_attributes_for :projectmembers, :allow_destroy => true 
    end 

    class Projectmember < ActiveRecord::Base 
     validates :fk_userid, presence: true 
     validates :fk_roleid, presence: true 

     belongs_to :roles 
     belongs_to :users 
     belongs_to :migproject 
    end 

这是我的看法

<%= mp.fields_for :projectmembers do |pm| %> 
     <%= render "projectmember_fields", :projectmembers => pm %> 
     <% end %> 

这是我的部分

<tr class="fields"> 
    <td>Select Users :</td><td><%= projectmembers.collection_select :fk_userid, User.all, :pk_userid, :fname, {:prompt => true} %></td> 
    <td>&nbsp;&nbsp;&nbsp;&nbsp;Select Role :</td><td><%= projectmembers.collection_select :fk_roleid, Role.all, :pk_roleid, :rolename, {:prompt => true} %></td> 
    <td><span class="removefld"><%= projectmembers.hidden_field :_destroy %><%= link_to "Remove" %></span></td> 
</tr> 

但是,当我运行得到这样的错误

undefined local variable or method `projectmembers' for #<#<Class:0x4e13680>:0x2ea41e0> 

我在哪里犯错?

是否有任何其他方法添加动态字段到表单?


这是我的应用助手

module ApplicationHelper 
def link_to_add_fields(name, mp, association) 
     new_object = mp.object.send(association).klass.new 
     id = new_object.object_id 
     fields = mp.fields_for(association, new_object, child_index: id) do |build| 
      render(association.to_s.singularize + "_fields", mp: build) 
     end 
     link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n","")}) 
    end 
end 

我可以渲染HTML从同一页块,而不是调用助手部分的?

回答

6

你需要把它写这样的:在章

<%= render :partial => "projectmember_fields", :locals => {:projectmembers => pm} %> 

更多信息 “3.4.4传递局部变量” 的guide


编辑的:只需理解。我之前有过这个。您的问题来自于link_to_add_fields方法,在下面一行:

render(association.to_s.singularize + "_fields", mp: build) 

render调用也需要将局部变量,像这样:

render(:partial => "#{association.to_s.singularize}_fields", :locals => {:projectmembers => build} 

下一次,找到一个方法来显示整个回溯您的错误,并查看您的代码的每个被调用的行。

+0

的另一种方式工作在HAML,虽然。 –

+0

也许是由于渲染到'render_with_haml'的别名 – Benj

+0

但它仍然不适用于我。 这是完整的错误消息,则表明 NameError在Migprojects#显示 显示C:/Sites/vinpa/app/views/migprojects/_projectmember_fields.html。erb哪里行#2上升: 未定义的局部变量或方法'projectmembers'为#<#:0x395bab8> –

0

尽量不要使用型号名称为表单生成器

<%= render "projectmember_fields", pm_form: pm %>

和里面的部分:

<%= pm_form.collection_select ..

+0

仍然我得到同样的错误。这些是跟踪 应用/视图/ migprojects/_projectmember_fields.html.erb:2:在'_app_views_migprojects__projectmember_fields_html_erb___866008266_25255512' 应用程序/助手/ application_helper.rb:6:在'在link_to_add_fields块 应用程序/助手/ application_helper.rb:5 :在'link_to_add_fields' 应用/视图/ migprojects/new.html.erb:24:在'在_app_views_migprojects_new_html_erb___572287492_43497120' 块 应用/视图/ migprojects/new.html.erb:2:在'_app_views_migprojects_new_html_erb___572287492_43497120' 我可以添加虚设内容部分,但得到与表单元素erroe我不是 –

+0

你在哪里有link_to_add? 当我需要构建嵌套表单时,我通常使用这个宝石: https://github.com/ryanb/nested_form 为您构建方法。 link_to_add可能是问题吗? – fedetaglia

+0

我有在应用助手 模块ApplicationHelper DEF link_to_add_fields(姓名,熔点,关联) new_object = mp.object.send(关联).klass.new ID = new_object.object_id 字段= mp.fields_for(关联,new_object,child_index:id)do | build | render(association.to_s.singularize +“_fields”,mp:build) end link_to(name,'#',class:“add_fields”,data:{id:id,fields:fields.gsub(“\ n ”, “”)}) 结束 结束在你的助手 –