Изображения работают / отображаются в моем новом приложении Rails - PullRequest
4 голосов
/ 27 сентября 2011

Обновление: в порядке. это странно, в браузере я могу получить доступ к изображениям по адресу localhost: 3000 / assets / images / rails.png, но когда я помещаю этот путь в файл seed.rb и затем загружаю страницу, он показывает, что он пытается найти изображение в /assets/rails.png т.е. оно пропускает папку с изображениями ... есть идеи?

Возможно ли, что рельсы где-то настроены так, чтобы просматривать только две папки?

Я использую книгу под названием Agile web Development с Rails, чтобы узнать, как использовать фреймворк, но, похоже, есть небольшие отличия. Он предоставляет код для rails 3.0 и 3.1 (я использую последний), но он не всегда работает, как ожидалось. До сих пор мы создали скаффолдинг для класса Products и использовали seed.rb для помещения некоторых данных в базу данных sqlite3. В папке assets / images есть изображения для каждого «продукта», но они не отображаются. Я экспериментировал в файле seed.rb с путем к изображениям, но он не работал.

Изображения находятся в папке app / assets / images

Я покажу вам следующие файлы, каждый из которых так или иначе связан с изображениями

1.app / просмотров / продукты / _form.html.erb 2.app/views/products/index.html.erb 3. дБ / семена. Рб

ОБНОВЛЕНИЕ: в файле журнала указано, что для изображений существует ошибка маршрутизации.

Started GET "/assets/wd4d.jpg" for 127.0.0.1 at Tue Sep 27 11:01:43 -0400 2011
Served asset /wd4d.jpg - 404 Not Found (3ms)

ActionController::RoutingError (No route matches [GET] "/assets/wd4d.jpg"):


Rendered /Library/Ruby/Gems/1.8/gems/actionpack-3.1.0/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.5ms)


Started GET "/images/ruby.jpg" for 127.0.0.1 at Tue Sep 27 11:01:43 -0400 2011

ActionController::RoutingError (No route matches [GET] "/images/ruby.jpg"):

приложение / просмотров / продукты / _form.html.erb

<%= form_for(@product) do |f| %>
  <% if @product.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:</h2>

      <ul>
      <% @product.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :description %><br />
    <%= f.text_area :description, :rows => 6 %>
  </div>
  <div class="field">
    <%= f.label :image_url %><br />
    <%= f.text_field :image_url %>
  </div>
  <div class="field">
    <%= f.label :price %><br />
    <%= f.text_field :price %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

2.app / просмотров / продукты / index.html.erb

<h1>Listing products</h1>

<table>
<% @products.each do |product| %>
  <tr class="<%= cycle('list_line_odd', 'list_line_even') %>">

    <td>
      <%= image_tag(product.image_url, :class => 'list_image') %>
    </td>

    <td class="list_description">
      <dl>
        <dt><%= product.title %></dt>
        <dd><%= truncate(strip_tags(product.description),
               :truncate => 80) %></dd>
      </dl>
    </td>

    <td class="list_actions">
      <%= link_to 'Show', product %><br/>
      <%= link_to 'Edit', edit_product_path(product) %><br/>
      <%= link_to 'Destroy', product, 
                  :confirm => 'Are you sure?',
                  :method => :delete %>
    </td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New product', new_product_path %>
  1. 3. db / seeds.rb (обратите внимание, что я экспериментировал с URL-адресом изображения)

    Product.delete_all Product.create (: title => «Веб-дизайн для разработчиков», : описание => % {

    бла бла

    }, : image_url => 'wd4d.jpg',
    : цена => 42,95)

    . , .

    Product.create (: title => 'Programming Ruby 1.9', : описание => % {

    бла бла

    }, : image_url => '/images/ruby.jpg', : цена => 49.50)

    . , .

    Product.create (: title => 'Предписания теста Rails', : описание => % {

    бла бла

    }, : image_url => '/images/rtp.jpg', : цена => 43,75)

Ответы [ 4 ]

6 голосов
/ 24 ноября 2011

Хорошо, я работал над этой книгой, и вы должны внести изменения в 2 местах.

В начальном файле просто укажите имя файла jpg. Поскольку вы используете rails 3.1, на что-либо внутри assets / images / можно ссылаться только по его имени.

Вам также придется изменить вид. Загрузите исходный код книги здесь http://pragprog.com/titles/rails4/source_code и посмотрите, что у них есть для депо 2 в представлении товаров # index. Они получили очень небрежно с этим релизом.

3 голосов
/ 27 сентября 2011

Взгляните на Rails 3.1 Руководство по конвейеру активов . В разделе 2.2 Кодирование ссылок на активы вы найдете следующее:

В обычных представлениях вы можете получить доступ к изображениям в каталоге assets / images следующим образом:

<%= image_tag "rails.png" %>

Поскольку я понимаю ваш код (я могу ошибаться здесь), вы пытаетесь сохранить имя файла изображения в базе данных и показать это изображение позже вместе с другими данными объекта. Поэтому вы должны попытаться удалить из него путь, используя только имя файла. А затем обозначим это с помощью метода image_tag.

1 голос
/ 25 сентября 2014

Единственное, что сработало для меня, было:

<%= image_tag('/assets/images/' + product.image_url, class: 'list_image') %>
1 голос
/ 16 сентября 2012

У меня была такая же проблема, а затем я понял, что когда я загружал тестовые образы для приложения Depot, они сохранялись как XXX.jpeg вместо XXX.jpg. В результате URL-адреса в seed.rb не совпадали с именами файлов в assets / images.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...