Ruby on rails Rails 4-如何在另一个模型上显示一个模型的表单&x27;s观点

Ruby on rails Rails 4-如何在另一个模型上显示一个模型的表单&x27;s观点,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我有一个应用程序,我有项目,每个项目都有照片。每个照片都有一个状态,我希望能够在列出其中所有照片的项目显示页面上更新该状态。因此,每张照片都会在staus列中显示一个下拉列表,显示我的不同状态 我能够做到这一点,我在一个单独的页面上更新状态,没有问题,但我需要每一张照片有项目显示页面上显示的形式 这是我的照片\u controller.rb class PhotosController < ApplicationController def create @pro

我有一个应用程序,我有项目,每个项目都有照片。每个照片都有一个状态,我希望能够在列出其中所有照片的项目显示页面上更新该状态。因此,每张照片都会在staus列中显示一个下拉列表,显示我的不同状态

我能够做到这一点,我在一个单独的页面上更新状态,没有问题,但我需要每一张照片有项目显示页面上显示的形式

这是我的
照片\u 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
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
操作中声明
@photo
。(目前已被注释掉)。但是当我声明它时,我没有参数,我只有
项目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 %>

然后,在调用partial时发送当前照片:

<% 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 %>

悬而未决的

抱歉,此项目当前没有照片


查看
渲染
我们正在传递当前照片,这样您的更新将按预期工作。请确保在渲染此部分的任何地方都执行相同的操作。

太棒了,效果非常好。出于某种原因,它现在显示为输入,而不是下拉列表。我会努力的。
<% 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 %>