has_many中的视图:通过关系

我一直在修补这个问题已有一段时间了,似乎无法弄明白这一点。 它可能很简单,但是这里有:

我在’层压’和’标准’之间有一个has_many:trough关系,加上模型’标准化’。

Standard.rb

class Standard  :standardizations end 

Standardization.rb

 class Standardization < ActiveRecord::Base attr_accessible :laminate_id, :standard_id belongs_to :laminate belongs_to :standard end 

Laminate.rb

 class Laminate  :standardizations end 

方案是层压板可以属于几个标准,我已经在视图的新部分工作 – 复选框和一切。 我的问题是在尝试显示给定层压板的相应标准的名称时。 到目前为止,我能够显示层压板所分配的标准,但不仅仅是标准的名称。

我的show.html.erb说:

  

这会使一切正确,但是说

   

……不起作用。 我怎样才能利用每个人的名字,分配标准?

Laminate_controller:

 class LaminatesController < ApplicationController # GET /laminates # GET /laminates.json def index @laminates = Laminate.all @standards = Standard.all respond_to do |format| format.html # index.html.erb format.json { render json: @laminates } end end # GET /laminates/1 # GET /laminates/1.json def show @laminate = Laminate.find(params[:id]) @standard = Standard.find(params[:id]) respond_to do |format| format.html # show.html.erb format.json { render json: @laminate } end end # GET /laminates/new # GET /laminates/new.json def new @laminate = Laminate.new respond_to do |format| format.html # new.html.erb format.json { render json: @laminate } end end # GET /laminates/1/edit def edit @laminate = Laminate.find(params[:id]) end # POST /laminates # POST /laminates.json def create @laminate = Laminate.new(params[:laminate]) respond_to do |format| if @laminate.save format.html { redirect_to @laminate, notice: 'Laminate was successfully created.' } format.json { render json: @laminate, status: :created, location: @laminate } else format.html { render action: "new" } format.json { render json: @laminate.errors, status: :unprocessable_entity } end end end # PUT /laminates/1 # PUT /laminates/1.json def update @laminate = Laminate.find(params[:id]) respond_to do |format| if @laminate.update_attributes(params[:laminate]) format.html { redirect_to @laminate, notice: 'Laminate was successfully updated.' } format.json { head :no_content } else format.html { render action: "edit" } format.json { render json: @laminate.errors, status: :unprocessable_entity } end end end # DELETE /laminates/1 # DELETE /laminates/1.json def destroy @laminate = Laminate.find(params[:id]) @laminate.destroy respond_to do |format| format.html { redirect_to laminates_url } format.json { head :no_content } end end end 

以下@laminate.standards返回标准列表。 这里的呼叫名称不起作用,您应该在列表上执行每个循环:

 # replace the following: <%= @laminate.standards.name %> # with this code: <% @laminate.standards.each do |standard| %> <%= standard.name %> <% end %> 

如果您想要更短的版本但更少可自定义:

 <%= @laminate.standards.map{ |standard| standard.name }.join(', ') %> # This will show all the standards' name with a coma-space ',' between it # same a above but shorter: <%= @laminate.standards.map(&:name).join(', ') %> # this will call the 'name' method on each standard of @laminate.standards # and join them with a coma-space # something that would look like this: # name1, name2, name3