2012-02-01 3 views
0

Я хочу, чтобы пользователи нажимали кнопку, чтобы опубликовать событие на моей странице публикации.Обновляет атрибуты из пустой form_for

просмотров/События/publish.html.erb

<%= form_for @event do |p| %>  
    <%= p.submit "Yes publish my event now" %> | 
    <%= link_to "Cancel", events_path %> 
<% end %> 

Пользователи могут получить к публикации страницы с моей страницы индекса

просмотров/События/index.html.erb

<% for event in @events %> 
    <%= link_to "Publish", publish_path(:id => event) %> 
<% end %> 

Публикация_пата определена в маршрутах, которые должны находиться в контроллере событий

routes.rb

match 'publish' => 'events#publish', :as => :publish 

Вот мой контроллер событий

events_controller.rb

def publish 
    @event = Event.find(params[:id]) 
end 

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

С помощью этого кода пользователи не могут видеть мою страницу публикации, когда нажимают на ссылку публикации в индексе. Вместо этого они будут отправлены обратно на страницу индекса, но все атрибуты будут обновлены.

def publish 
    @event = Event.find(params[:id]) 
    if @event.update_attributes(:published_at => DateTime.now, :publish => true) 
    flash[:success] = "Your event has been publish" 
    redirect_to events_path 
    end 
end 

Вопрос в том, как я получаю пользователя от индекса страницы -> Publish страница -> нажмите на кнопку отправить -> обновить атрибуты -> вернуться на главную страницу с флэш-сообщение?

+0

+1 для деталей, но можете ли вы объяснить проблему немного больше? Что происходит, что вы не хотите? –

+0

Что вы подразумеваете под индексной страницей? Действие 'index' вашего' EventController'? Вы показываете вспышку на этой странице? – Mischa

+0

В настоящее время происходит страница индекса -> нажмите ссылку, чтобы перейти на страницу «Опубликовать страницу ->» -> «Страница указателя». – Moose

ответ

1

Ну, я предполагаю, что вы пытаетесь достичь следующий рабочий поток, Index page -> Publish page -> click submit -> update the attributes -> return back to Index page with flash message

Мы не можем достичь и с помощью одного действия, поэтому добавить еще одно действие

events_controller

# Will take user to confirm page, where we display the form with "Yes publish now" and "cancel" button 
def confirm_publish 
    @event = Event.find(params[:id]) 
end 

# When user clicks the "yes publish now" button, request should come here and perform the same. 
def publish 
    @event = Event.find(params[:id]) 
    if @event.update_attributes(:published_at => DateTime.now, :publish => true) 
    flash[:success] = "Your event has been publish" 
    redirect_to events_path 
    end 
end 

Соответственно нам нужно изменить виды и маршруты.

+0

В моем ** confirm_publish.html.erb ** Я добавил '<% = form_for @event, url => {: action => 'publish'}, do | p | %> '. Но тогда он говорит: «Нет маршрутов, совпадающих с {: action =>« publish »,: controller =>« events »}« У меня уже есть «ресурсы: события» в моих ** routes.rb **. Что мне не хватает? – Moose