Попробуйте передать id вместо объекта, как следует
post :create, params: { user_id: user.id, movie_id: movie.id }
Я думаю, вам вообще не нужно передавать user
или user_id
, поскольку вы не используете его при создании действия. current_user
при создании действия должен вернуть пользователя, в котором вы входите в блок before
.
Управляет их преимуществами и недостатками, необходимо выбрать на основе ситуации, я настоятельно рекомендую, чтобы Вы сделали тот выбор на основе случая, не выбирайте "the one true way" для всего проекта.
Для некоторых случаев разделение между отправителем и получателем и способностью отправить команды с помощью только XAML является большим преимуществом (для хорошего взгляда в качестве примера, как шаблон управления ScrollBar общается с управляющей логикой по http://msdn.microsoft.com/en-us/library/ms742173.aspx).
В других случаях команды могут повернуть то, что было бы 2 обработчиками событий строк в некоторых невозможных следовать за вовлечением чудовища, изменяющим 4 отдельных места в приложении (Как ViewModel должен закрыть форму?).
Единственная причина состоит в том, чтобы иметь, хорошо знают реестр команд. Средства, что события, вероятно, будут закрытыми методами и я чувствую, что они плотно связываются к коду окна. В то же время Команды дают способность сохранить реализацию (событие) и определение (Команда) отдельно, можно даже использовать другой класс (смотрите на ApplicationCommands).
Кроме того, когда я делаю свою работу WPF, я использую реализацию ICommand (Шаблон "команда"). Вся логика команды переходит к Выполнить методу. Это помогает мне сохранить разделение логики более структурированным способом без сверхсложности кода окна. При использовании этой опции можно создать команды на модели и поэтому связать их без шума. Смотреть.
Модель Create.
public class Model
{
ICommand CloseMessagePopupCommand {get; set;}
}
Затем присвойте Контекст Данных
public MainWindow()
{
this.DataContext = new Model();
}
И используйте follwing XAML код.
<Button
Command="{Binding CloseMessagePopupCommand}"
Content="{StaticResource Misc.Ok}" />
Другие вариации на ICommand, кажется, популярный способ реализовать сложные структуры команды.
Brian Noyes в его статье о PRISM говорит
Направленные команды в WPF очень мощны и полезны, но у них есть некоторые недостатки при применении к составному приложению. Прежде всего, они полностью связаны с визуальным деревом - invoker должен быть частью визуального дерева, и привязка команды должна быть связана через визуальное дерево.... Второй недостаток - то, что они плотно связаны с деревом фокуса UI, и продолжает говорить о DelegateCommand и CompositeCommand, который включает CAL (Призма).
Я пытаюсь остаться верным шаблону "команда", к которому обращается Mike при разрабатывании приложений WPF, использовании комбинации подходов Andy № 3 и № 2.
Я могу думать о только одной оборотной стороне о командах, по моему мнению: только определенные действия определенных элементов UI вызывают команды. Один способ обойти это состоит в том, чтобы иметь Ваш вызов обработчика событий Выполнить метод на команде. Я думаю, что команды обеспечивают очень хороший способ инкапсулировать логику выполнения. Если Вы поддерживаете большую часть UI и реализуете его с помощью MVC/MVC/MVVM шаблона, это становится очень очевидным.
Я поощряю Вас смотреть на ряд Dan Crevier на шаблоне DataModel-View-ViewModel, в особенности раздел по Командам и Инкапсулирующим Командам. Даже если этот шаблон не удовлетворяет Ваши потребности, он дает замечательный обзор того, как можно инкапсулировать логику в отдельном классе.