2016-05-13 4 views
2

Я новичок в RoR, и я пытаюсь создать классическое веб-приложение с сообщением &. Существует модель & контроллер (Onlines), которая позволяет пользователю размещать свои сообщения на общей стене с новой информацией, имеющей отношение к этому действию. В настоящее время я пытаюсь изменить вложенную форму, связанную с этим действием (Onlines), изменив модель Onlines. Но я не могу получить доступ к этому действию моего контроллера, и я не понимаю, почему?Доступ к моему действию редактируется с другого контроллера

Мой код ::

Onlines контроллер:

class OnlinesController < ApplicationController 
 
    before_action :set_online 
 

 
    def edit 
 
    end 
 

 
    private 
 

 
    def set_online 
 
    @post = Post.find(params[:post_id]) 
 
    @online = Online.find_by(params[:id]) 
 
    end 
 

 
end

Сообщение Контроллер:

class PostsController < ApplicationController 
 
    before_action :set_online 
 

 

 
    def show 
 
    @online.post_id = @post.id 
 
    end 
 

 
    private 
 

 
    def set_online 
 
    @onlines = Online.find_by(id: params[:id]) 
 
    end 
 

 
end

просмотров/сообщений/показать: `

<div class="btn-group" role="group" aria-label="..."> 
 
    <%= link_to '- taked - ', edit_online_path(@online), data: { confirm: 'Confirmer la mise en ligne de #{@title}?' }, class: "btn btn-primary " %> 
 
</div>

Просмотров/onlines/редактирование:

<%= simple_form_for([@post, @onlines]) do |f| %> 
 
    <div class="row"> 
 
      <div class="col-md-12"> 
 
       <div id="Order"> 
 
       <%= f.simple_fields_for :orders do |order| %> 
 
       <%= render 'orders_fields', f: order %> 
 
       <%end%> 
 
       <div class="Order_links"> 
 
        <%= link_to_add_association 'Ajouter une part', f, :orders, class: "btn btn-default" %> 
 
       </div> 
 
       </div> 
 
      </div> 
 
      </div> 
 

 
<div class="form-group text-center"> 
 
<%= f.submit "Pusher", class: 'btn btn-success' %> 
 
</div> 
 

 
<% end %>

Маршруты:

Rails.application.routes.draw do 
 
    get 'profiles/show' 
 

 
    mount RailsAdmin::Engine => '/admin', as: 'rails_admin' 
 
    
 
    devise_for :users, :controllers => { registrations: 'registrations' } 
 

 
    resources :posts do 
 
resources :comments 
 
resources :onlines 
 
end 
 

 
    get ':pseudo', to: 'profiles#show', as: :profile 
 
    get ':pseudo/edit', to: 'profiles#edit', as: :edit_profile 
 
    patch ':pseudo/edit', to: 'profiles#update', as: :update_profile 
 
    get ':post_id/online/new', to: 'online#new', as: :new_online 
 
    post ':post_id/online/:id/edit', to: 'onlines#edit', as: :edit_online 
 

 

 
    root 'posts#index'

Так что, если вы можете направлять меня, чтобы добиться успеха этого действия было бы замечательно, спасибо!

ответ

1

Во-первых, всегда обращайтесь к своим моделям в единственном экземпляре (онлайн в вашем случае), так как это означает, что Rails ожидает и контроллер во множественном числе, как вы заявили. Будьте осторожны с инструкцией «before_action: set_online», поскольку она использует метод «find» для определения @post и вызовет исключение, если параметр не передан! Кроме того, ваш маршрут показывает только запрос на получение, чтобы вы попали на страницу edit_online. Затем вам понадобится маршрут «пост», связанный с вашим действием «обновление», которое отправит данные в ваше приложение после того, как пользователь представит свою форму! Предоставьте остальную часть ваших маршрутов, и я сделаю более глубокий взгляд, но также немного уточню ваш вопрос. Если вы просто пытаетесь перейти от одного действия в одном контроллере к другому действию в другом контроллере, вы хотите использовать оператор redirect_to.

+0

Спасибо за ваш оперативный ответ Я редактирую свой вопрос, чтобы показать вам все мои маршруты Я не понимаю, что вы сказали мне о set_online, нужно ли мне ограничивать действие только? –

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