【问题标题】:Rails controllers, rendering view from different controller, saving form inputs and error messagesRails 控制器,从不同控制器渲染视图,保存表单输入和错误消息
【发布时间】:2015-08-14 17:50:49
【问题描述】:

两个控制器:用户和任务。 用户的主页 = 用户/用户 ID。 主页上的表单用于将数据输入到任务模型中。 此过程由任务控制器处理。 成功输入:从数据库重定向和加载任务,OK,一切正常。 输入不成功,只需要刷新主页,所以我们保留表单输入和专门的(非闪存)错误消息

我似乎无法让任务控制器传递原始页面。错误是缺少模板用户/1(如果我要在浏览器中访问,这是正确的语法)。

我应该调用一个动作并传递参数吗?对此初学者的任何帮助将不胜感激。

def create
    @task = current_user.tasks.build(task_params)
        if @task.save
        flash[:success] = "New task created!"
        redirect_to user_url(current_user)
        else
        flash[:error] = "Task not saved! Please see guidance by form labels"
        render "users/#{current_user.id}"
        end
end

private

     def task_params
        params.require(:task).permit(:label, :address, :content)
     end

结束

【问题讨论】:

    标签: ruby-on-rails-4


    【解决方案1】:

    users/1 不是模板,而是路径。 users/show 是本例中的模板。

    请注意,使用渲染的唯一原因是在当前控制器操作的范围内渲染模板,而不是正常操作。 即您可能需要设置@user 等,否则用户/显示模板会因缺少变量而感到不安。

    在这种情况下,重定向到 user_path(id) 并允许 users/#show 控制器操作设置 @user 变量等可能更容易。

    【讨论】:

    • 谢谢克里斯。我使用了'render users/show'和'render users#show'和redirect_to user path,他们都重新发布了页面。我已经使用 flash 消息解决了这个问题,但我希望用户不要去任何地方,这样我们就可以看到来自 Active Record 的表单输入和错误消息。
    • 快速回答(我避免给出快速回答。)是用 'render "users/show" 'railsguides 替换'render "users/#{current_user.id}"'对这些事情有帮助。
    • 谢谢@Chris。这解决了我也遇到的问题。现在错误消息渲染得很好。
    猜你喜欢
    • 2015-04-04
    • 2015-10-19
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多