一对多关系:找不到'id'= 3的Ofertum

时间:2019-07-27 08:36:37

标签: ruby-on-rails ruby model-view-controller routes one-to-many

我无法链接到显示文件 http://localhost:3000/sigs/3 我得到这个错误 SigsController中的ActiveRecord :: RecordNotFound#show 找不到'id'= 3

的Ofertum

请帮助我。这是我的密码 我有两种型号:一种用于报价,一种用于标牌 每个报价都有一个标志,每个标识都有一个提议

在信号模型中

  belongs_to :ofertum

在铁皮模型中

  has_many :sigs

在航线上

  resources :oferta
  resources :sigs

在信号控制器中

class SigsController < ApplicationController
  def new
    @ofertum = Ofertum.find(params[:id])
    @sig = @ofertum.sigs.build
  end
  def create
    @ofertum = Ofertum.find(params[:id])
    @sig = @ofertum.sigs.build(sig_params)
    if @sig.save
      redirect_to sigs_path(:id => @ofertum.id)
    end
  end

  def destroy
    @ofertum = Ofertum.find(params[:id])
    @sigs=@ofertum.sigs
    if @sigs.destroy
      redirect_to root_path
    end
  end
  def show
    @ofertum = Ofertum.find(params[:id])
    @sigs=@ofertum.sigs
  end


  def edit
  end

  def update
  end
  def index
  end

  def destroy
  end
   private
  def sig_params
    sig_params = params.require(:sig).permit([:name,:comment,:description,:price,:image])
  end
end

在oferta index.html.erb

<% @oferta.each do |o| %>
    <ul class="cat">
      <li class="pull-left"><h2><%= link_to o.offer,o %></h2><br><h4><%= o.description %></h4>
        <div class="main">
          <% if o.sigs.exists? %>
            <div id="myBtnContainer">
              <% for item in o.sigs %>
                <button class="btn active"  onclick="filterSelection('<%= item.name %>')"><%=  item.name%><%= link_to item.description,item  %><br></button>
              <% end %>
            </div>
            <div class="row">

              <% for item in o.sigs %>
                <div class="column <%= item.name %>">
                  <div class="content">
                    <%= image_tag item.image.url(), style: "width:100%"%>
                    <h4><br><%= item.name %></h4>
                    <p><%= item.comment %></p>    
                  </div>
                </div>
              <% end %><br><br>
            </div>
          <% end %>
        </div>
      <% end %>

在数据库中

class AddNameToSig < ActiveRecord::Migration[5.2]
 def change
    add_column :sigs, :name, :string
    add_column :sigs, :comment, :string
    add_column :sigs, :description, :text
    add_column :sigs, :price, :string
  end
end

在sigs show.html.erb

<%= @sig.name %>
<div class="container">
<%= link_to  @sig, class: "btn tf-btn btn-default", method: :delete, data: { confirm: "Are you sure you want to delete this sign?" } do %>Delete <% end %> 
</div>

1 个答案:

答案 0 :(得分:2)

路径/sigs/3中的参数是一个信号,而不是一个通量。所以你可以这样做

def show
  sig = Sig.find(params[:id])
  @sigs = sig.ofertum.sigs
end

def show
  ofertum = Sig.find(params[:id]).ofertum
  @sigs = ofertum.sigs
end

是的,如果您在视图中甚至需要一个角膜

def show
  @ofertum = Sig.find(params[:id]).ofertum
  @sigs = @ofertum.sigs
end