Построение Rails ActiveRecord где предложение

Согласно JEP 262: TIFF Image I / O плагин TIFF, который ранее был частью JAI, будет доступен как часть Java SE, начиная с Java 9.

Это означает, что с использованием Java 9 будет работать только следующий код без каких-либо дополнительных импортов или зависимостей:

BufferedImage image = ImageIO.read(inputTIFF);
// ...modify image (compose, resize, sharpen, etc)...
ImageIO.write(image, "TIFF", outputTIFF);

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

16
задан Kevin Pang 28 April 2011 в 14:33
поделиться

4 ответа

Как насчет:

def index
  author_id = params[:author_id]

  @posts = Post.scoped

  @post = @post.where(:author_id => author_id) if author_id.present?

  @post = @post.where(:some_other_condition => some_other_value) if some_other_value.present?
end

Post.scoped по сути является лениво загруженным эквивалентом Post.all (поскольку Post.all возвращает массив немедленно, а Post.scoped просто возвращает объект отношения). Этот запрос не будет выполнен, пока вы на самом деле не попытаетесь выполнить его в представлении (вызывая .each).

24
ответ дан John Gibb 28 April 2011 в 14:33
поделиться

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

def index
   @post = Post.all
end

def get
  @post = Post.where("author=?", params[:author_id])
end

. или показать), чтобы получить запрошенный и показать его!

2
ответ дан Paolo Perego 28 April 2011 в 14:33
поделиться

Вы должны смоделировать URL, используя вложенные ресурсы. Ожидаемый URL будет / авторы / 1 / сообщений. Думайте об авторах как о ресурсах. Прочитайте о вложенных ресурсах в этом руководстве: http://guides.rubyonrails.org/routing.html (прокрутите до 2.7 - Вложенные ресурсы).

0
ответ дан Patrick Lafleur 28 April 2011 в 14:33
поделиться

Этот вопрос довольно старый, но он все еще высоко ценится в Google в 2019 году, а также некоторые более ранние ответы устарели, поэтому я подумал, что поделюсь возможным решением.

В модели вводятся некоторые области с тестом на наличие переданного параметра:

class Post
    scope :where_author_ids, ->(ids){ where(author_id: ids.split(‘,’)) if ids }
    scope :where_topic_ids,  ->(ids){ where(topic_id:  ids.split(‘,’)) if ids }

Затем в контроллере вы можете просто установить столько фильтров, сколько пожелаете, например:

def list
    @posts = Post.where_author_ids(params[:author_ids])
                 .where_topic_ids(params[:topic_ids])                                  
                 .where_other_condition_ids(params[:other_condition_ids])
                 .order(:created_at)

Параметр может быть одним значением или разделенным запятыми списком значений, оба работают нормально.

Если param не существует, он просто пропускает предложение where и не фильтрует его по определенным критериям. Если параметр существует, но его значение является пустой строкой, он будет «отфильтровывать» все.

Конечно, это решение не подходит для любых обстоятельств. Если у вас есть страница просмотра с несколькими фильтрами, но при первом открытии вы хотите показать все свои данные, а не данные, пока не нажмете кнопку «Отправить» или аналогичную (как это сделал бы контроллер), вам придется слегка подправить ее. ,

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

0
ответ дан R Jones 28 April 2011 в 14:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: