سؤال

وهكذا خلفيتي هي في خدمات الويب جافا، ولكن أحاول جعل الانتقال إلى ROR.

وأنا باستخدام FlexImage للتعامل مع تحميل الصورة وتوليد المصغرة. تابعت دليل والسلوك CRUD على ما يرام عند نقطة واحدة. ومع ذلك، في مرحلة ما، كان السلوك CRUD لبلدي واحد من نماذج (صور) مكسورة.

ورمز الخطأ انني اتلقى العودة كما يلي: ActiveRecord::RecordNotFound in ImagesController#show -- Couldn't find Image with ID=#<Image:0x4e2bd74>. وبعبارة أخرى، عندما أنا أقول القضبان لإنشاء / تحديث / تدمير، هو الخلط بين الكائن مع معرف. يبدو أن هذا يشير قد تكون هناك مشكلة في التوجيه. اعتقدت إضافة جزئية للصور ربما كان المتاعب، ولكن التراجع التعديلات لم اصلاحها.

وفيما يلي، عرض وتحديث أساليب جديدة للتحكم عن نموذج الصور:

      # images_controller.rb

        # ...

      def new
        @image = Image.new

        respond_to do |format|
          format.html # new.html.erb
          format.xml  { render :xml => @image }
        end
      end

    # ...
  def show
    @image = Image.find(params[:id])

    respond_to do |format|
      format.jpg  # show.jpg.erb 
      format.html # show.html.erb
      format.xml  { render :xml => @image }
    end
  end



    # ...

      def create
        @image = Image.new(params[:image])

        if @image.save 
        redirect_to image_url(@image)
        else
        flash[:notice] = 'Your image did not pass validation.'
        render :action => 'new'
        end
      end 
     # ...

لاحظ أن تظهر () هو، بطبيعة الحال، متوقعا بطاقة إثبات هويته. وهنا يكمن new.html.erb لتحميل صورة جديدة:

# new.html.erb [upload image]
<h1>New image</h1>

<% form_for @image, :html => { :multipart => true } do |f| %>
  <%= f.error_messages %>
  <table><tr><td width="50%">
  <p>
    <%= f.label :filename %><br />
    <%= f.text_field :filename %></p>
  </td>
  <td><p><b>Upload Image</b><br />
    <%= f.file_field :image_file %><br />
    or URL: <%= f.text_field :image_file_url %>
    <%= f.hidden_field :image_file_temp %>
  </td>
  <td>
    <b>Uploaded Image:</b><br />
    <%= embedded_image_tag(@image.operate { |img| img.resize 100 }) if @image.has_image? %>
  </td>
  </tr>

  </table>
  <p>
    <%= f.label :description %><br />
    <%= f.text_area :description %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

<%= link_to 'Back', images_path %>

والجزء ذي الصلة من routes.rb هي كما يلي:

# routes.rb [excerpt]

  map.resources :images
  map.image 'images/:action/:id.:format', :controller => 'images'

ونلاحظ أيضا أن صورة جديدة يفعل على في الواقع الحصول على تحميلها و يتم طرح الخطأ على إعادة توجيه لعرض (الذي تتوقع البطاقة الشخصية سارية المفعول في بارامس [: معرف] وليس جسم لأي سبب من الأسباب ويجري سلمها.)

وشكرا لمساعدتكم مقدما، واسمحوا لي أن أعرف إذا كان أي شيء يقفز عليك.

هل كانت مفيدة؟

المحلول

ومن النظر في قانون يبدو لي أن المشكلة قد تكون ناجمة عن استخدام image_url(@image) في تركيبة مع الطريق image غير مريحة.

وأنت ربما تريد إزالة السطر

map.image 'images/:action/:id.:format', :controller => 'images'

ومن routes.rb الخاص بك.

وخط

map.resources :images

يجب أن يكون في الواقع ما يكفي لفضح جميع الإجراءات CRUD في ImagesController الخاص بك.

نصائح أخرى

واقتراحي هو استخدام روبي التصحيح ووضع الحق نقطة فاصل قبل استدعاء Image.find. تفقد بارامس [: معرف] ونرى ما هو عليه في الواقع.

واتباع نهج أكثر الغيتو، وطرح هذا قبل استدعاء Image.find

logger.info params[:id].class

ونرى ما هو في هذا المتغير. هل من الممكن أن يكون لديك نوع من قبل التصفية التي تتلاعب ذلك؟

والمحاولة

  redirect_to :action => "show", :id => @image

وأعتقد أن هذا هو وسيلة أكثر الاصطلاحية إلى رمز إعادة التوجيه. و+1 لmolf من النصائح حول طرق مريحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top