2016-05-17 7 views
-1

Я бы хотел отобразить мои заказы, так как ингредиенты отображаются чуть выше. И я не понимаю, почему это не так?Показать вложенную форму

сообщение: Ингредиенты вложенные
Onlines: Заказы вложенные

просмотры/сообщения/показать:

<p> 
    <strong>Title:</strong> 
    <%= @post.title %> 
</p> 

<p> Posted by : <%= link_to @post.user.pseudo, profile_path(@post.user.pseudo) %>, <%= time_ago_in_words(@post.created_at) %> ago </p> 
<p> 
    <strong>Image:</strong> 
<%= image_tag @post.image.url(:medium) %> 
</p> 

<p> 
    <strong>Description:</strong> 
    <%= @post.description %> 
</p> 


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


<div class="col-md-12"> 
    <h3>Ingrédients :</h3> 
    <div id="ingredients"> 

     <ul> 
     <%- @post.ingredients.each do |ingredient| %> 
     <li> 
      <%= ingredient.name %> 
     </li> 
     <%end%> 
     </ul> 
    </div> 
    </div> 
<br> 

    <div class="col-md-9"> 
    <h3>Parts :</h3> 
    <div id="ingredients"> 

     <ul> 
     <%- @post.onlines.orders.each do |order| %> 
     <li> 
      <%= order.id %> 
     </li> 
     <%end%> 
     </ul> 
    </div> 
    </div> 

    <%= link_to 'Patcher', edit_post_online_path(@post, @post.onlines.last), class: "btn btn-warning"%> 



     </div> 

поста управления:

class PostsController < ApplicationController 
    before_action :authenticate_user! 
    before_action :set_post, only: [:show, :edit, :update, :destroy] 
    before_action :owned_post, only: [:edit, :update, :destroy] 


    # GET /posts 
    # GET /posts.json 
    def index 
     @posts = Post.push_posts 

end 


    # GET /posts/1 
    # GET /posts/1.json 
    def show 

    end 

    # GET /posts/new 
    def new 
    @post = current_user.posts.build 
    end 

    # GET /posts/1/edit 
    def edit 
    end 

    # POST /posts 
    # POST /posts.json 
    def create 
    @post = current_user.posts.build(post_params) 
    respond_to do |format| 
     if @post.save 
     format.html { redirect_to @post, notice: 'Post was successfully created.' } 
     format.json { render :show, status: :created, location: @post } 
     else 
     format.html { render :new } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /posts/1 
    # PATCH/PUT /posts/1.json 
    def update 
    respond_to do |format| 
     if @post.update(post_params) 
     format.html { redirect_to @post, notice: 'Post was successfully updated.' } 
     format.json { render :show, status: :ok, location: @post } 
     else 
     format.html { render :edit } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /posts/1 
    # DELETE /posts/1.json 
    def destroy 
    @post.destroy 
    respond_to do |format| 
     format.html { redirect_to posts_url, notice: 'Post was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 



    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_post 
     @post = Post.find(params[:id]) 
    end 




    # Never trust parameters from the scary internet, only allow the white list through. 
    def post_params 
     params.require(:post).permit(:user_id, :title, :description, :image, ingredients_attributes: [:id, :name, :_destroy]) 
    end 

    def owned_post 
    unless current_user == @post.user 
    flash[:alert] = "That post doesn't belong to you!" 
    redirect_to root_path 
    end 
end 

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

end 

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

class OnlinesController < ApplicationController 
    before_action :authenticate_user! 
    before_action :set_post 
    before_action :owned_online, only: [:new, :update] 
    before_action :set_online 


    def new 
    @online = current_user.onlines.build 
    @online.post_id = @post.id 
    @online.user_id = current_user.id 
    end 

    def edit 
    end 

    def taked 
    @online.orders.update(taked: false) 
    end 

    def create 
     if Online.where(post_id: params[:post_id]).any? 
     @online = Online.where(post_id: params[:post_id]).last.update_attributes(push: false) 
     end 
    @online = @post.onlines.create(online_params) 
    if @online.save 
     if @online.portion <= 0 
      @online.update(push: false) 
      flash[:success] = 'Veuillez indiquer le nombre de parts disponibles ' 
      redirect_to root_path 
     else 
     @online.update(pushed_at: Time.zone.now) 
     @online.update(push: true) 


     flash[:success] = 'Votre post est en ligne !' 
     redirect_to root_path 

    end 
    else 
     render 'new' 
    end 
    end 




def update 
    if @onlines.update(online_params) 
     if @online.push == false 
     if @online.portion <= 0 
      @online.update(push: false) 
      flash[:success] = 'Veuillez indiquer le nombre de parts disponibles ' 
      redirect_to root_path 
     else 
     @online.update(push: true) 
     flash[:success] = 'Votre post a bien été pushé !' 
     redirect_to root_path  
     end 
    end 
    else 
     @user.errors.full_messages 
     flash[:error] = @user.errors.full_messages 
     render :edit 
    end 
    end 


private 

def online_params 
    params.require(:online).permit(:user_id, :post_id, :prix, :portion, :push, :pushed_at, orders_attributes: [:id, :taked, :taked_at, :taked_by, :validated_at, :validated_by, :_destroy]) 
    end 

    def owned_online 
    @post = Post.find(params[:post_id]) 
    unless current_user == @post.user 
    flash[:alert] = "That post doesn't belong to you!" 
    redirect_to :back 
    end 
end 

    def set_post 
    @post = Post.find_by(params[:post_id]) 
    end 


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

end 

модели онлайн:

class Online < ActiveRecord::Base 
 
    
 
    belongs_to :post 
 
    belongs_to :user 
 
    has_many :orders 
 
    
 
    accepts_nested_attributes_for :orders, allow_destroy: true 
 
    
 
    scope :push, ->{ where(push: true).order("pushed_at DESC") } 
 
end

заказов:

class Order < ActiveRecord::Base 
 
    belongs_to :online 
 
    belongs_to :user 
 
end

и должность:

class Post < ActiveRecord::Base 
 

 
    
 
    belongs_to :user 
 
    has_many :onlines, dependent: :destroy 
 

 
    scope :push_posts, lambda { joins(:onlines).merge(Online.push) } 
 

 
    
 

 
    has_many :ingredients, dependent: :destroy 
 
    
 

 

 
    accepts_nested_attributes_for :ingredients, reject_if: :all_blank, allow_destroy: true 
 

 
    has_many :comments 
 
    
 
    validates :image, presence: true 
 

 
    has_attached_file :image, styles: { medium: "300x300#"}, default_url: "/images/:style/missing.png" 
 
    validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/ 
 
end

Так что, если у вас есть решение выше, я возьму его !! Спасибо

+0

Какова связь между «контурами» и «заказами»? – Uzbekjon

+0

Заказы - это вложенная форма onlines, я положил свои модели вверх – tutoto

ответ

0

Ваш Post s имеет много Online s. Каждый Online имеет множество Orders. Итак, вы должны перебирать каждый заказ каждого онлайн-сообщения в своем сообщении.

<ul> 
    <%- @post.onlines.each do |online| %> 
     <%- online.orders.each do |order| %> 
     <li> 
     <%= order.id %> 
     </li> 
     <%end%> 
    <%end%> 
    </ul> 
+0

Отлично! Это то, что мне нужно, Ты давно забыл о себе – tutoto

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