gpt4 book ai didi

ruby-on-rails - 在一页上列出并创建 rails 3

转载 作者:行者123 更新时间:2023-12-04 03:43:10 26 4
gpt4 key购买 nike

我想制作一个仪表板页面,上面有一个创建 Action (表单),下面是一个列表 Action ......(显示所有已经提出的问题)我想知道什么是最好的方法来做到这一点。

我有一个带有列表和创建操作的 QuestionsController。所以我确实需要使用 createlist 操作制作一个 DashboardController ......?然后从 QuestionController 渲染两个模板...?

或者我是否需要使用列表创建一个 DashboardController 并引用问题模型在它们上创建操作?

此致,
蒂斯

最佳答案

您应该创建 QuestionsController,并将表单部分包含在索引 View 中。这个表单应该简单地跟随创建 Action ,这个 Action 应该在错误时(记住可能有验证错误)呈现索引 Action ,成功后它应该重定向回 index.html 。

除非您还需要从其他地方创建问题,否则它会更复杂。

更新:

您也可以创建 DashboardsController,但我只会使用它来显示仪表板(显示操作和单一资源,而不是 routes.rb 中的资源),然后通常按照新问题表单到 QuestoinsController#create,并重定向回 DashboardsController#show。通过这种方式,如果您还在仪表板上显示多个资源类型,则更加 RESTful,因为您显示单个仪表板(带有问题和其他资源),但您遵循 QuestionsController#create 创建问题。

更新 2:

如果您(或其他任何人)需要,可以在一个地方进行:

  • 在您的 routes.rb文件定义资源:
    resources :questions
  • 在您的 QuestionController :
    class QuestionsController < ApplicationController
    def index
    setup_questions
    end

    def create
    @question = Question.new(params[:question])
    if @question.save
    redirect questions_path, :notice => "Successfully created question."
    else
    setup_questions
    render :action => :index
    end
    end

    private

    def setup_questions
    @questions = Question.order(:name).page(params[:page])
    # or any other method to fetch all your questions

    @question ||= Question.new
    end
    end
  • 在您的 app/views/questions/index.html.erb看法:
    <% @questions.each do |question| %>
    <%# display question as table row %>
    <% end %>

    <% render :template => "form", :locals => {:question => @question} %>
  • app/views/questions/_form.html.erb您只需为新问题定义标准形式:
    <%= form_for question do |f| %>
    <%# form fields %>
    <% end %>

  • 那么你不需要查看 new操作,因为此操作只会显示新问题的表单,而您在 index 中有此表单行动。

    关于ruby-on-rails - 在一页上列出并创建 rails 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6661303/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com