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