2013-05-23 2 views
0

В моем контроллере я настраиваю новую запись и коллекцию записей. Как я могу удалить new_record из коллекции?Коллекция Rails, которая не содержит новых записей

def index 
    @note = @user.notes.build 
    @notes = @user.notes 
end 

К сожалению, я получаю пустой записную книжку, когда я этого не желаю.

Update

class NotesController < ApplicationController 

    before_action :get_user 

    def index 
    prepare_notes 
    end 

    private 

    def prepare_notes 
    @notes = @user.notes 
    @note = @user.notes.build 
    end 

    def get_user 
    @user = current_user 
    end 

end 
+0

Когда вы визуализируете @notes, вы можете '@ notes.select (&: persisted?). Each' –

+1

Я думал об этом, но это просто не кажется очень чистым. – ardavis

ответ

1

Вы строите пустую запись здесь: @note = @user.notes.build

При вызове @user.notes в любой из двух линий, AR кэширование в результате сбора. Поэтому в обеих строках кода он возвращает тот же объект коллекции. Когда вызывается метод build, новый пустой объект Note добавляется в эту же коллекцию. Таким образом, неважно, в какой порядок вы вставляете эти строки кода, вы всегда увидите новый пустой Note.

Если у вас есть РЕЖИМ УСТАНОВОК отношения как способы, вы можете создать новую заметку и назначить пользователь к нему:

def index 
    @note = Note.new(user: @user) 
    @notes = @user.notes 
end 

Это создает новый Note и устанавливает это внутренняя ссылка пользователя. Однако он еще не изменяет объект пользователя с этой ассоциацией.

Если вы не собираетесь использовать ссылку @note.user, на ваш взгляд, вы можете удалить приложение пользователю и просто иметь @note = Note.new. В зависимости от того, разрешено ли пользователям создавать заметки для других пользователей, ваше действие #create может установить пользователя в этот момент.

+0

Я предполагаю, что я мог бы сделать это просто' @note = Note.new', а затем назначить его пользователю в действии 'create'. То, что вы говорите, работает, но то, что я не понимаю, - это то, почему изменение порядка (например, @Paulo Fidalgo) не означает. – ardavis

+0

@ardavis Я заявил, что во втором абзаце. –

+0

Ах, да, извиняюсь, я неправильно понял, когда прочитал. Большое спасибо. – ardavis

1

Как вы можете видеть на docs он создает новый пустой объект. Если вы измените порядок строк:

def index 
    @notes = @user.notes 
    @note = @user.notes.build 
end 

в переменной @notes вы получите фактические примечания.

+0

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

+0

Я добавил свой код контроллера. Как-то '@ notes' отображается как:' # ]> ' – ardavis

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