【问题标题】:how to fix missing template , application/create in rails如何修复丢失的模板,应用程序/在 Rails 中创建
【发布时间】:2018-02-01 12:25:06
【问题描述】:

我不断收到这个缺少模板的错误

" Missing template listings/create, application/create with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/home/codio/workspace/app/views" * "/var/lib/gems/2.2.0/gems/kaminari-0.16.3/app/views" * "/var/lib/gems/2.2.0/gems/commontator-4.10.3/app/views" * "/home/codio/.bundler/ruby/2.2.0/devise-a9d90503e903/app/views" * "/home/codio/.bundler/ruby/2.2.0/koudoku-9e73e64e5520/app/views" * "/var/lib/gems/2.2.0/gems/mailboxer-0.12.4/app/views"

,每当我尝试创建一个对象时,在堆栈溢出中进行了几次搜索后,有人建议重定向或渲染,最初在我的创建操作中,没有显式重定向,并且在创建对象后重定向已完成页面(预期的行为)。尝试了两种解决方案,但仍然遇到相同的错误,据我了解,创建操作不需要相应的视图。

如何将创建操作重定向到显示页面而不创建 一个视图?。

    listings_controller.rb
    class ListingsController < ApplicationController
       ...

      def create
        @listing = Listing.new(listing_params)
        if @listing.save
          if params[:images]
              params[:images].each { |image|
                @listing.pictures.create(image: image)
              }
           end
         (@users - [current_user]).each do |user|
            Notification.create(recipient: user, actor: current_user, action: "posted", notifiable: @listing)
         end   
         flash[:notice]= "L'annonce #{@listing.listing_number} a eté publiee avec succès."
         respond_with(@listing)  
        end
      end
         ...
  end

触发创建动作的表单是通过模态渲染的

_form.html.erb

    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <h4 class="modal-title">Publication d'annonce</h4>
          </div>
          <div class="modal-body"> 
             <%= form_for :listing, :url => {:action => :create} do |f| %>
              <div class="form-group row">
                   <%= f.label :name,"Titre de l'annonce", class: 'col-4 col-form-label'%> 
                <div class="col-8">
                   <%= f.text_field :name, placeholder: "Titre de l'annonce",class: "form-control here" %>  
                </div>
              </div>
              <div class="form-group row">
                <%= f.label :price,"Prix d'offre", class:'col-4 col-form-label'%>
                <div class="col-8">
                  <div class="input-group">
                    <div class="input-group-addon">
                      <i class="fa fa-usd"></i>
                    </div>
                    <%= f.text_field :price,placeholder: "Prix d'offre" ,class:"form-control here"%>
                  </div>
                </div>
              </div>
              <div class="form-group row">
                 <%= f.label :display_usd ,'Prix en USD', class: 'col-4' %>  
                <div class="col-8">
                  <div class="form-check form-check-inline">
                    <label class="form-check-label">
                      <%= f.check_box :display_usd, class:'form-check-input' %>
                      USD
                    </label>
                  </div>
                </div>
              </div>
              <div class="form-group row">
                <%= f.label :category_id,class:"col-4 col-form-label" %>
                <div class="col-8">
                  <%= f.collection_select :category_id, Category.all, :id, :name, {prompt: "choose a category"}, {class: "form-control here"}%>
                </div>
              </div>
              <div class="form-group row">
                <label for="select1" class="col-4 col-form-label">Localisation</label> 
                <div class="col-8">
                  <select id="select1" name="select1" class="form-control">
                    <option value="rabbit">Rabbit</option>
                    <option value="duck">Duck</option>
                    <option value="fish">Fish</option>
                  </select>
                </div>
              </div>
               <div class="form-group row">
                <%= f.label :image, "Image Principale", class:'col-4 col-form-label' %>   
                <div class="col-8">
                <%= f.file_field :image, class:'form-control here'%>
                </div>
              </div> 
              <div class="form-group row">
                <label class="col-4">Condition</label> 
                <div class="col-8">
                  <div class="form-check form-check-inline">
                    <label class="form-check-label">
                      <input name="radio1" type="radio" class="form-check-input" value="rabbit">
                            Usé
                    </label>
                  </div>
                  <div class="form-check form-check-inline">
                    <label class="form-check-label">
                      <input name="radio1" type="radio" class="form-check-input" value="duck">
                            Neuf
                    </label>
                  </div>
                  <div class="form-check form-check-inline">
                    <label class="form-check-label">
                      <input name="radio1" type="radio" class="form-check-input" value="fish">
                            normal
                    </label>
                  </div>
                </div>
              </div>
              <div class="form-group row">
                 <%= f.label :description,'Produit Description', class:'col-4 col-form-label' %> 
                <div class="col-8">
                  <%= f.text_area :description,class:" form-control here " do%>  
                  <span id="textareaHelpBlock" class="form-text text-muted">veuillez donner une description exacte de votre produit.</span>
                  <%end%>
                </div>
              </div>
              <div class="form-group row">
                <%= f.label :image, "Image additionel", class:'col-4 col-form-label' %>   
                <div class="col-8">
                <%= file_field_tag "images[]", type: :file, multiple: true, class:'form-control here'%>
                </div>
              </div> 
              <div class="form-group row">
                <label class="col-4">Sauvegarder sans publier</label> 
                <div class="col-8">
                  <div class="form-check form-check-inline">
                    <label class="form-check-label">
                      <input name="radio" type="radio" class="form-check-input" value="rabbit">
                            Unpublished
                    </label>
                  </div>
                </div>
              </div>
           </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Fermer</button>
            <%= f.button "Publier Produit" , class: 'btn btn-primary pull-right', data: {disable_with: "<i class='fa fa-spinner fa-spin'></i> Publication en cours..."} %> 
          </div>
          <%end%>
        </div><!-- /.modal-content -->
      </div><!-- /.modal-dialog -->
    </div><!-- /.modal -->

【问题讨论】:

  • 使用 redirect_to ,同时检查 @listing.save 是否返回 true。

标签: ruby-on-rails


【解决方案1】:

如果您使用 HTML 执行 create 操作,则会出现此错误。 create 通常没有关联的视图;您使用它来处理实体,并将用户重定向到其他地方。

因此,您应该可以使用:

redirect_to @listing

在控制器代码的末尾。

使用@listing 有点像Rails 的魔力——它更常显示为redirect_to listing_path(@listing)

I.E.

  def create
    @listing = Listing.new(listing_params)
    if @listing.save
      if params[:images]
          params[:images].each { |image|
            @listing.pictures.create(image: image)
          }
       end
     (@users - [current_user]).each do |user|
        Notification.create(recipient: user, actor: current_user, action: "posted", notifiable: @listing)
     end   
     flash[:notice]= "L'annonce #{@listing.listing_number} a eté publiee avec succès."
     redirect_to @listing 
    end
  end

这样可以吗?

另一个常见的做法是根据对象是否成功保存到数据库而采用不同的方法。例如:

def create
  @listing = Listing.new(listing_params)
  if @listing.save
    ...
    redirect_to @listing, notice: "..."
  else
    flash.now[:alert] = "Listing failed to save" 
    render :new
  end
end

解决这个问题的一个好方法是使用生成器来查看默认情况下 Rails 如何处理事情 - 您可以在终端中使用以下内容进行挖掘:rails g controller test_controller

希望对您有所帮助 - 如果您有任何问题,请告诉我。

【讨论】:

  • 你用的是第一个例子吗?如果是这样,如果记录无法保存,它仍然会发生 - 当记录不保存时,没有redirect / render。如果是这样,您可以尝试在上面添加else,就像上一个示例一样?如果没有,请更新您的问题以包含完整的跟踪,我会看看我能做什么:)
  • 对不起,我不在城里,我尝试使用 if...else ,没有错误,未创建列表,这是来自控制台的日志。 ` 清单存在(0.6 毫秒)从“清单”中选择 1 作为一个,其中(“清单”。“id”不为空)和“清单”。“slug”=“演示”限制 1 命令:: 文件 -b -- mime '/tmp/cc8e2791f19382e4553c4b4c5bc77b8f20180204-5071-13bbntn.jpg' (0.3ms) ROLLBACK`
  • 好像记录没有保存在数据库中,它回滚了,所以我只需要调试看看发生了什么,为什么记录没有保存。
  • 太好了,很高兴听到我们已经解决了这个错误 :) 这是否意味着你在这里得到了答案@ObedLorisson?从那个新错误来看,问题似乎与图像字段有关——我建议将其放入一个新问题中。如果你在评论中@我,很高兴看看!
猜你喜欢
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多