Мое действие редактирования использует действие создания вместо обновления - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть следующие отношения:

store.rb -> has_many :products
product.rb -> belongs_to :store

rout.rb

resources :stores do
  resources :products
end

builds_controller.rb

def edit  
  @build = Build.find(params[:id])
  @user = User.find(@build.user_id)
  @hero = Hero.find(@build.hero_id)

  @heros = Hero.order('name ASC')
  @items = Item.order('name ASC')

  unless current_user.id == @user.id
    respond_to do |format| 
      format.html { redirect_to root_path, notice: 'You are only allowed to edit your own builds' }
    end
  end   
end

По какой-то причине, когда я пытаюсь перейтина страницу редактирования сборки и попробуйте отредактировать ее, она запускает действие create вместо update .

Кто-нибудь знает, что может быть причиной этого?

Кроме того, я бы хотел, чтобы форма на странице редактирования была заполнена текущими данными сборки.Как мне этого добиться?

Мой репо: https://github.com/imjp/DotA-Items

1 Ответ

1 голос
/ 27 декабря 2011

Ваша проблема связана с вашей формой:

<%= semantic_form_for([current_user, current_user.builds.build]) do |f| %>

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

<%= semantic_form_for([@user, @build]) do |f| %>

Теперь, в вашем действии new, вам также необходимо подготовить необходимые переменные:

@user = User.find(params[:user_id]) #assuming you have a path like users/id/builds/new
# or @user = current_user if that's what you want
@build = @user.builds.build

ps: вы должны использовать гем cancan для управления авторизацией, вместо того, чтобы делать что-то вроде if @user.id == current_user.id и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...