2013-11-22 4 views
0

Я новичок в Rails, исходя из .NET, на самом деле это первый проект Ruby, над которым я работал, поэтому я все еще работаю над тем, как к нему подходят.Ruby: Сохранение двух моделей в одном сообщении

Начну со структурой для моей проблемы: У меня есть таблица Project, и изображения таблицы. Существует также таблица ProjectImage, которая, как вы догадались, имеет project_id и image_id. Как пользователь, когда я создаю проект, в новом/редактируемом представлении я хотел бы иметь возможность выбирать любые изображения, которые я хотел бы загрузить (я бы хотел, чтобы принудительно применялось хотя бы одно изображение, но, возможно, это еще один вопрос).

Я хотел бы думать, что это возможно, так как это довольно просто сделать в .NET, я бы просто иметь ViewModel, представляющий Project и, по меньшей мере, один необходимый image_id. Тем не менее, мое понимание Rails недостаточно для того, чтобы увидеть прямой репликацию подхода в Rails.

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

+0

Оформить заказ [Dragonfly] (https://github.com/markevans/dragonfly) драгоценный камень, теперь это драгоценный камень для привязки к Ruby/Rails прямо сейчас. –

ответ

2

Вы можете настроить форму таким образом

<%= form_for :project, :html=> {:multipart=>true} do |f| %> 
    <%= f.text_field :title %> 
    <%= file_field_tag :images, :multiple => true, :name => 'images[]' %> 
    <%= f.submit %> 
<% end %> 

затем в контроллере, у вас есть проект атрибуты в params[:project] (просто заголовок в этом случае), тогда как params[:images] будет массивом загруженных изображений.

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

Для таблицы ProjectImage, если вы не нуждаются в дополнительной информации, хранящейся в самом отношении, вы должны вместо этого добавить PROJECT_ID столбец в таблицу изображений, а затем пусть образ belong_to :project и проект has_many :images

+0

Каковы хорошие драгоценные камни? Я хотел бы попробовать сначала с вашим примером, просто чтобы развить мое понимание, а затем реализовать его с помощью драгоценного камня. – ediblecode

+0

Кроме того, у меня есть другие объекты, которые имеют отношение к таблице изображений, поэтому таблица ProjectImage – ediblecode

1

Добро пожаловать в мир Rails с одного новичка на другой.

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

Вы можете найти GitHub здесь, не стесняйтесь спросить, если у вас есть какие-либо вопросы по нему:

https://github.com/carrierwaveuploader/carrierwave

Существует также старше камень, который много людей используют, которые вы можете найти здесь:

https://github.com/thoughtbot/paperclip

также не уверен, что вам нужна таблица projectimage как вам просто нужно добавить столбец в таблицу проекта и изображение будет храниться там в виде хэша для FilePath и ссылается проекта или пользователя.

Вы можете увидеть railscast для carrierwave здесь:

http://railscasts.com/episodes/253-carrierwave-file-uploads

+0

Спасибо за ответ и весь совет! – ediblecode

Смежные вопросы