Не удается выяснить, почему атрибут photo плагина paperclip не передается в качестве параметров при отправке

#ruby-on-rails #paperclip #ruby-on-rails-plugins #partial-views #params

#ruby-on-rails #скрепка #ruby-on-rails-plugins #частичные просмотры #параметры

Вопрос:

Я пытаюсь реализовать функцию в своем приложении, где пользователь отправляет сообщение вместе с изображением.

Это что-то похожее на то, что есть в www.diasp.org .

Я имею дело с довольно сильно устаревшей конфигурацией Rails 2.0.2 и Ruby 1.8.7, оба работают на ОС Ubuntu 10.04 для конкретных целей проекта.

Изначально я обнаружил проблему с поиском подходящего плагина для paperclip, который соответствовал бы вышеуказанным потребностям конфигурации.

Я, наконец, использую этот коммит paperclip:-

 https://github.com/thoughtbot/paperclip/commit/d177c8f838458348a9f4d1fe41918c5bd99a989c .
  

Я смог успешно реализовать базовый POC без каких-либо проблем с этим плагином и подумал, что пришло время сделать то же самое в моем приложении project.

Текущая проблема, с которой я сталкиваюсь, заключается в том, что при отправке сообщения post я не могу понять, где я ошибаюсь, например, с точки зрения того, что мешает передать фотографию в качестве параметров атрибуту group_post, который я использую.

У меня все это частично…. Часть кода, которая будет принимать изображение и сообщение, выглядит следующим образом…

 <%if @current_user.is_an_existing_member_of_group(@investor_group)%>
<%form_for  :group_post, :url => {:action => :post_message, :id => params[:id]},:html => {:multipart => true, :id => 'new_post'} do |f| -%>
    Start Discussion:<%=f.text_field :message%>
   <%=f.file_field :photo%>
   <%=f.submit "Post" %>
  <%end%>

<div id = "latest_post"> </div>
<%for a in @group_all_posts %>
<%= image_tag a.photo.url %>
<%= a.message %> by <%=  Investor.find(a.post_by).first_name %> <div class ="contentdispgrp" id="style_chck"> <%=  distance_of_time_in_words(a.created_at,Time.now) %> ago </div><br/><br/> <hr/>
<%end%>
  

Я на самом деле пытался сравнить это с файлом view в моем POC, который успешно загрузил изображения для меня и даже отобразил то же самое. Новый файл.html.erb моего POC выглядит следующим образом:-

 <h1>New post</h1>

<%= error_messages_for :post %>

<% form_for :post, :url => {:action => :create}, :html => { :multipart => true } do |f| %>
  <p>
    <b>Message</b><br />
    <%= f.text_field :message %>
  </p>

  <%= f.file_field :photo%>

  <p>
    <%= f.submit "Create" %>
  </p>
<% end %>

<%= link_to 'Back', posts_path %>
  

Представление о том, что передается как часть параметров согласно журналу, выглядит примерно так при запущенном POC:-

Случай 1

    Processing PostsController#create (for 127.0.0.1 at 2011-05-20 15:55:00) [POST]
      Session ID: BAh7ByIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo%0ASGFzaHsABjoKQHVzZWR7ADoMY3NyZl9pZCIlZjQ5NWYyNDAxNDVjNmZkOGU5%0AZjM0ZjJjOTZlOTRlM2I%3D--a30d15cac639bde46b5d57218084da993caf094b
      Parameters: {"commit"=>"Create", "post"=>{"photo"=>#<File:/tmp/CGI20110520-5743-u5iauq-0>, "message"=>"abc1"}, "authenticity_token"=>"1c19641bd05adb24157f5f1d04b4c8e072cb7ebe", "action"=>"create", "controller"=>"posts"}
      Post Columns (0.000975)   SHOW FIELDS FROM `posts`
      SQL (0.000199)   BEGIN
      Post Create (0.000332)   INSERT INTO `posts` (`created_at`, `photo_file_size`, `photo_file_name`, `updated_at`, `photo_content_type`, `photo_updated_at`, `message`) VALUES('2011-05-20 15:55:00', 83794, 'Water lilies.jpg', '2011-05-20 15:55:00', 'image/jpeg', NULL, 'abc1')
      SQL (0.059184)   COMMIT
    Redirected to http://localhost:4004/posts/22
    Completed in 0.33966 (2 reqs/sec) | DB: 0.06069 (17%) | 302 Found [http://localhost/posts]
  

Случай 2

Представление о том, что передается как часть параметров согласно журналу, выглядит примерно так при запуске приложения project:-

 Processing GroupsController#post_message (for 127.0.0.1 at 2011-05-20 15:42:52) [POST]
  Session ID: 0d806dc029197b7db11552a447dd329e
  Parameters: {"group_post"=>{"message"=>"hi5"}, "action"=>"post_message", "id"=>"10", "controller"=>"groups"}
  Investor Columns (0.002125)   SHOW FIELDS FROM `investors`
  Investor Load (0.000173)   SELECT * FROM `investors` WHERE (`investors`.`id` = 397) LIMIT 1
  InvestorGroup Columns (0.001198)   SHOW FIELDS FROM `investor_groups`
  InvestorGroup Load (0.000114)   SELECT * FROM `investor_groups` WHERE (`investor_groups`.`id` = 10) 
  InvestorGroup Load (0.000207)   SELECT investor_groups.* FROM investor_groups INNER JOIN investor_group_members ON investor_groups.id = investor_group_members.investor_group_id WHERE ((investor_group_members.investor_id = 397)) 
  GroupPost Columns (0.002383)   SHOW FIELDS FROM `group_posts`
  SQL (0.000111)   BEGIN
  GroupPost Create (0.000342)   INSERT INTO `group_posts` (`post_by`, `created_at`, `photo_file_size`, `photo_file_name`, `updated_at`, `investor_group_id`, `photo_content_type`, `message`) VALUES(397, '2011-05-20 15:42:53', NULL, NULL, '2011-05-20 15:42:53', 10, NULL, 'hi5')
  SQL (0.069269)   COMMIT
Rendering groups/post_message
  Investor Load (0.000194)   SELECT * FROM `investors` WHERE (`investors`.`id` = 397) 
Completed in 0.13884 (7 reqs/sec) | Rendering: 0.00845 (6%) | DB: 0.07612 (54%) | 200 OK [http://localhost/us/groups/post_message/10]
  

Пожалуйста, обратите внимание на разницу между случаем 1 и случаем 2.

Код в моей модели выглядит следующим образом:-

 class GroupPost < ActiveRecord::Base 
  has_many :group_comments
  belongs_to :investor_group
  validates_presence_of :message
  has_attached_file :photo #,  :styles => { :medium => "300x300>", :thumb => "100x100>" }
end
  

Я хотел бы упомянуть об этом, это что-то странное, что я наблюдал ранее, когда имел дело с параметрами.. то, чего я никогда не ожидал, будет вести себя подобным образом..

Ранее я реализовал автозаполнение с использованием partial, но однажды я добавил комментарий к этой части, документирующий, кем был добавлен этот файл и о чем этот файл.. Хотите верьте, хотите нет .. автозаполнение перестало работать у меня … !! . Это сработало вскоре после удаления комментариев. Синтаксис комментариев, которые я использовал, был <!-- -->

Могу ли я ожидать аналогичного поведения в этом случае по какой-то причине, о которой я в настоящее время не знаю …??

Я понимаю, что не могу ожидать, что многие вещи будут работать у меня с версией commit, которую я использую, но поскольку базовая функциональность работает в POC, мне интересно, что мешает тому же работать в моем приложении project..

Пожалуйста, подскажите мне, где я мог ошибиться …, это срочно..

Пожалуйста, дайте мне знать, если вам понадобится какая-либо другая часть кода..

Большое спасибо…

Ответ №1:

В коде, который не работает, у вас есть:

 :html => {:multipart => 'true'}
  

но это должно быть

 :html => {:multipart => true}
  

как это есть в коде, который работает.

Каждый раз, когда я сталкивался с этой проблемой, это было из-за некоторой опечатки в параметре multipart.

Комментарии:

1. @Charlie: Спасибо, что указали на это… Я действительно пропустил это ..! , но я все еще продолжаю сталкиваться с той же ситуацией.. какую разницу вы ожидаете от удаления кавычек вокруг true ..? . Я также просто изменю это в вопросе..

2. С кавычками это не сработает. Без кавычек это должно работать, если нет другой проблемы. Вы хотите сказать, что это все еще не работает?

3. @Charlie: Да, это все еще не работает, поскольку в параметрах по-прежнему нет никаких следов переноса изображения вместе с другими атрибутами.. Есть ли какое-либо другое место (файл или около того), которое приходит вам на ум, которое я мог бы проверить ..?

4. @Charlie: У меня это заработало .. наконец-то.. <%form_for :group_post, @group_post, :url => {:action => :post_message, :id => params[:id]},:html => {:multipart => true}, :id => 'new_post' do |f| %> у меня получилось .. идентификатор пришлось удалить из символа html для меня.. Но на самом деле я нахожусь в компромиссе .. идея наличия id в html заключалась в том, чтобы использовать его для рендеринга .js.erb файла, чтобы получить эффект AJAXY при отображении каждого поста.. Я действительно не думаю, что фиксация paperclip от 08 мая 2008 года поддерживала бы jquery.. есть идеи, где я мог бы проверить то же самое ..? Спасибо…