簡體   English   中英

Rails 4-如何在另一個模型的視圖上顯示一個模型的表單

[英]Rails 4 - How to display a form for one model on another model's view

我有一個應用程序,其中有項目,每個項目中都有照片。 每張照片的狀態我都希望能夠在項目的顯示頁面上更新,該頁面列出了其中的所有照片。 因此,每張照片都會在狀態列中顯示一個下拉菜單,並顯示我具有的不同狀態。

我可以在單獨的頁面上更新狀態,這沒問題,但是我需要每張照片都在項目顯示頁面上顯示表單。

這是我的photos_controller.rb

class PhotosController < ApplicationController

    def create
        @project = Project.find(params[:project_id])
        @photo = @project.photos.create(photo_params)
        @photo.save
        redirect_to @photo.project
    end

    def edit
        @photo = Photo.find(params[:id])
        @status_array = [] 
        Status.all.each do |status| 
            @status_array << status.value 
        end 
    end

    def update
        @photo = Photo.find(params[:id])
        @photo.update_attributes(photo_params)
        redirect_to @photo.project
    end

    private

    def photo_params
        params.require(:photo).permit(:provider, :attachment, :image_id, :size, :data_url, :url, :project_id, :status)
    end
end

這是我的projects_controller.rb

class ProjectsController < ApplicationController
    before_action :authenticate_user!, only: [:show]

    def create 
        @project = Project.create(project_params)
        @project.creator = current_user.email
        @project.save

        redirect_to @project
    end

    def index
        @projects = Project.all
    end

    def show
        @project = Project.find(params[:id])
        @photos  = @project.photos
        # @photo = Photo.find(params[:id])
    end

    private

    def project_params
        params.require(:project).permit(:project_num, :assigned, :project_status, :creator, :photo_id)
    end
end

這是我的表格views/photos/_edit.html.erb

<%= simple_form_for @photo do |f| %>
    <div class="form-group">
        <%= f.input :status, collection: @status_array %>
    </div>
    <div class="form-group">
        <%= f.button :submit, "Submit", class: 'btn btn-success' %>
    </div>
<% end %>

他們以這種方式在我的show all photos循環中的views/projects/show.html.erb中呈現表單。 <%= render 'photos/edit' %> views/projects/show.html.erb <%= render 'photos/edit' %>

               <% if @project.photos %>
                    <% @project.photos.each do |photo| %>
                        <tr>
                            <td><%= image_tag("#{photo.data_url}") %></td>
                            <td><%=  if photo.provider != "" then photo.provider.titleize else "Uncategorized" end %></td>
                            <td><%= photo.image_id %></td>
                            <td><%= photo.size %></td>
                            <td><a href="<%= photo.url %>">Link to image</a></td>
                            <td class="status-<%= photo.id %>">
                                <% if photo.status %>
                                    <%= photo.status %>
                                <% else %>
                                    Pending
                                <% end %>
                                <br>
                                <%= render 'photos/edit' %>
                            </td>
                        </tr>
                    <% end %>
                <% else %>
                    <p>Sorry, this project has no photos currently</p>
                <% end %>

我沒有在項目控制器中聲明@photo的理解show動作。 (當前已被注釋掉)。 但是當我聲明它時,我沒有參數,我只在project id上有參數,所以我無法以這種方式找到照片並用表格正確地對其進行更新。 我在這里有點迷路。 任何想法都將不勝感激。

您尚未定義正確的@photo變量,一個好的做法是不要在局部變量中使用實例變量,而總是手動將變量傳遞給它,按如下所示更改局部變量:

<%= simple_form_for photo do |f| %>
    <div class="form-group">
        <%= f.input :status, collection: @status_array %>
    </div>
    <div class="form-group">
        <%= f.button :submit, "Submit", class: 'btn btn-success' %>
    </div>
<% end %>

然后在調用部分發送當前照片時:

<% if @project.photos %>
                    <% @project.photos.each do |photo| %>
                        <tr>
                            <td><%= image_tag("#{photo.data_url}") %></td>
                            <td><%=  if photo.provider != "" then photo.provider.titleize else "Uncategorized" end %></td>
                            <td><%= photo.image_id %></td>
                            <td><%= photo.size %></td>
                            <td><a href="<%= photo.url %>">Link to image</a></td>
                            <td class="status-<%= photo.id %>">
                                <% if photo.status %>
                                    <%= photo.status %>
                                <% else %>
                                    Pending
                                <% end %>
                                <br>
                                <%= render 'photos/edit', photo: photo %>
                            </td>
                        </tr>
                    <% end %>
                <% else %>
                    <p>Sorry, this project has no photos currently</p>
                <% end %>

查看我們正在傳遞當前照片的render ,這樣您的更新將按預期進行。 確保在渲染此局部圖像的所有地方都執行相同的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM