您当前的位置:首页业界 >  >> 
Rails 中的布局和渲染
来源:博客园      时间:2023-04-24 18:01:06
Templates, Partials, and Layouts

在 Rails 中,视图是用于呈现 HTML、XML、JSON 等响应的模板。Rails 的视图系统支持模板、局部模板和布局模板,它们分别用于分离代码、提高代码重用性和提供统一的外观。

模板是视图的基本构建块。模板可以包含 HTML、Ruby 代码和其他标记,以生成动态内容。在 Rails 中,模板通常存储在 app/views目录中,并使用文件扩展名 .html.erb.xml.builder.json.jbuilder等来表示相应的格式。

局部模板是一种特殊类型的模板,它可以在其他模板中重复使用。局部模板通常用于呈现通用的部分,例如页眉、页脚、导航栏等。在 Rails 中,局部模板通常存储在 app/views目录下的 partials子目录中,并使用前导下划线 _来表示。

布局模板是一种用于定义应用程序的外观和结构的模板。布局模板定义了应用程序的共同元素,例如页眉、页脚、导航栏等。在 Rails 中,布局模板通常存储在 app/views/layouts目录中,并使用文件扩展名 .html.erb.html.haml来表示。您可以在控制器中使用 layout方法来指定布局模板。例如,如果您想要使用名为 application.html.erb的布局模板,可以在控制器中使用以下代码:

class MyController < ApplicationController  layout "application"  # ...end

在这个例子中,layout方法告诉 Rails 使用名为 application.html.erb的布局模板来呈现该控制器的响应。

总之,Rails 的视图系统支持模板、局部模板和布局模板,它们分别用于分离代码、提高代码重用性和提供统一的外观。模板是视图的基本构建块,局部模板可以在其他模板中重复使用,布局模板用于定义应用程序的外观和结构。

Templates

在 Rails 中,视图是用于呈现 HTML、XML、JSON 等响应的模板。视图通常由一个控制器动作触发,该动作会渲染一个视图模板并将其作为响应发送给客户端。Rails 视图系统支持多种格式,例如 HTML、XML、JSON 等,并且可以使用不同的模板语言,例如 ERB、Haml、Slim 等。

视图模板通常存储在 app/views目录中,并使用文件扩展名 .html.erb.xml.builder.json.jbuilder等来表示相应的格式。模板文件包含了 HTML、Ruby 代码和其他标记,以生成动态内容。在模板中,您可以使用 Ruby 代码来访问控制器实例变量和辅助方法,并使用标记来生成 HTML 或其他格式的内容。

例如,以下是一个简单的 ERB 模板,用于显示用户的名称和电子邮件地址:

<%= @user.name %>

<%= @user.email %>

在这个例子中,模板使用 <%= %>标记来呈现 @user实例变量的值。渲染此模板后,将生成一个包含用户名称和电子邮件地址的 HTML 页面。

总之,视图是用于呈现 HTML、XML、JSON 等响应的模板。模板通常存储在 app/views目录中,并使用文件扩展名 .html.erb.xml.builder.json.jbuilder等来表示相应的格式。模板文件包含了 HTML、Ruby 代码和其他标记,以生成动态内容。在模板中,您可以使用 Ruby 代码来访问控制器实例变量和辅助方法,并使用标记来生成 HTML 或其他格式的内容。

Partials

Partials 是 Ruby on Rails 中的一个功能,它允许我们将视图代码分解成多个小块,以便更好地组织和重用。Partials 通常用于在视图中呈现重复的代码或组件,例如页眉、页脚、导航栏、表单等。

使用 Partials,我们可以将视图代码分解成多个文件,并在其他视图中包含它们。这样,我们就可以避免重复编写相同的代码,并使代码更加易于维护和更新。

以下是一个使用 Partials 的简单示例:

假设我们有一个显示博客文章的视图 show.html.erb,它包含一个标题、作者和内容。我们可以将这个视图分解成多个 Partials,如下所示:

# app/views/posts/_header.html.erb

<%= @post.title %>

<%= @post.author %>

# app/views/posts/_content.html.erb

<%= @post.content %>

# app/views/posts/show.html.erb<%= render "header" %><%= render "content" %>

在这个示例中,我们创建了两个 Partials _header.html.erb_content.html.erb,它们分别呈现文章的标题、作者和内容。在 show.html.erb视图中,我们使用 render方法包含这两个 Partials。

Rails 默认会在视图文件夹中查找以下划线开头的文件,并将它们视为 Partials。在我们的示例中,Rails 将自动查找 _header.html.erb_content.html.erb文件,并将它们呈现到 show.html.erb中。

使用 Partials,我们可以将视图代码分解成更小的块,并在需要时将它们组合在一起。这使得代码更加易于管理和重用,从而提高开发效率。

Partial Layouts

Partial Layouts 是 Ruby on Rails 中的一个功能,它允许我们在 Partial 中使用布局,并可以在需要时覆盖 Partial 中的布局。这种方式可以帮助我们更好地组织和重用视图代码,特别是对于一些带有共同布局的视图。

使用 Partial Layouts,我们可以将一个布局文件分解成多个 Partial,并在需要时组合在一起。这样可以使布局更加灵活和易于管理,从而提高开发效率。

以下是一个使用 Partial Layouts 的简单示例:

假设我们有一个显示博客文章的视图 show.html.erb,它包含一个标题、作者和内容。我们想要在这个视图中使用一个布局,其中包含一个页眉、一个页脚和一个内容区域。

我们可以将这个布局分解成多个 Partials,如下所示:

# app/views/layouts/_header.html.erb

My Blog

# app/views/layouts/_footer.html.erb

Copyright © 2023 My Blog

# app/views/layouts/_content.html.erb<%= yield %># app/views/layouts/application.html.erb<%= render "header" %><%= render "content" %><%= render "footer" %>

在这个示例中,我们创建了三个 Partials _header.html.erb_content.html.erb_footer.html.erb,它们分别呈现布局的页眉、内容和页脚。在 application.html.erb布局文件中,我们使用 render方法包含这三个 Partials,并使用 yield方法呈现视图模板中的内容。

如果我们想要覆盖某个 Partial 中的布局,可以在视图模板中使用 render方法并指定要覆盖的 Partial 的名称,如下所示:

# app/views/posts/show.html.erb<%= render partial: "content", layout: "my_custom_layout" %>

在这个示例中,我们在 show.html.erb视图模板中使用 render方法并指定要呈现的 Partial 的名称为 content,并且指定使用名为 my_custom_layout的 Partial Layouts。

Rails 将自动查找名为 _my_custom_layout.html.erb_my_custom_layout.html.haml的 Partial Layouts,并将其中包含的 _content.html.erbPartial 呈现到布局的内容区域中。

使用 Partial Layouts,我们可以更好地组织和重用视图代码,特别是对于一些带有共同布局的视图。这使得代码更加易于维护和更新,从而提高开发效率。

View Paths

View Paths 是 Ruby on Rails 中用来查找视图模板的一种机制。当我们在控制器中使用 render方法呈现视图时,Rails 将自动搜索视图模板,并将其呈现到浏览器中。

Rails 使用一组默认的 View Paths 来查找视图模板。这些 View Paths 包括应用程序视图目录、公共视图目录、引擎视图目录和插件视图目录等。我们也可以通过配置 View Paths 来添加自定义的视图目录。

以下是一个简单的示例,说明如何在 Rails 中配置 View Paths:

假设我们有一个名为 MyApp的 Rails 应用程序,其中包含一个控制器 PostsController和一个视图模板 show.html.erb。默认情况下,Rails 将在 app/views/posts/show.html.erb中查找视图模板。

如果我们想要添加一个自定义的视图目录,在其中包含视图模板,并让 Rails 在查找视图模板时搜索这个目录,可以在 config/application.rb文件中添加以下代码:

# config/application.rbmodule MyApp  class Application < Rails::Application    # 添加自定义的视图路径    config.paths.add "app/views/custom", :before => "app/views"  endend

在这个示例中,我们在 config/application.rb文件的 config.paths中添加了一个自定义的视图路径 app/views/custom:before => "app/views"参数表示我们希望这个路径优先于默认的视图路径。

这样一来,当我们在 PostsController中使用 render方法呈现视图时,Rails 将自动查找 app/views/custom/posts/show.html.erb视图模板,并将其呈现到浏览器中。

View Paths 是一种非常灵活和强大的机制,它使我们能够轻松地组织和管理视图模板,并且能够支持自定义的视图路径。这样一来,我们可以更好地组织和重用视图代码,从而提高开发效率。

如果您还没有创建您的 User模型和相应的控制器和视图,您需要按照以下步骤进行操作:

创建 User模型和相应的属性

使用 Rails 生成器创建一个 User模型,并添加 nameemail两个属性。您可以使用以下命令:

rails generate model User name:string email:string

这将在 app/models/user.rb文件中创建一个名为 User的模型,并在数据库中创建一个名为 users的表,其中包含 nameemail两个字符串类型的字段。

然后运行数据库迁移以创建 users表:

rails db:migrate
创建 UsersController控制器

接下来,您需要创建一个名为 UsersController的控制器,用于处理与用户相关的请求。使用以下命令创建控制器:

rails generate controller Users

这将在 app/controllers/users_controller.rb文件中创建一个名为 UsersController的控制器。在 UsersController中,您需要定义一个名为 show的动作来显示用户的信息。在 UsersController中添加以下代码:

class UsersController < ApplicationController  def show    @user = User.find(params[:id])  endend

该动作使用 User.find方法查找要显示的用户,并将其存储在一个名为 @user的实例变量中,以便在视图中使用。

创建 show视图

接下来,您需要创建一个名为 show.html.erb的视图文件,用于显示用户的信息。在 app/views/users目录中创建一个名为 show.html.erb的文件,并添加以下代码:

<%= @user.name %>

<%= @user.email %>

该视图使用 @user实例变量来显示用户的名称和电子邮件。

定义路由

最后,您需要定义一个路由,以便将请求路由到 UsersControllershow动作。在 config/routes.rb文件中添加以下代码:

Rails.application.routes.draw do  resources :usersend

这将定义一个名为 users的资源路由,该路由将处理与 User模型相关的请求。现在您可以通过访问 /users/:idURL 来访问 UsersControllershow动作,其中 :id是要显示的用户的 ID。

现在您可以启动 Rails 服务器并访问 http://localhost:3000/users/:id,其中 :id是要显示的用户的 ID,以查看用户的名称和电子邮件信息。

创建响应

从控制器的角度来看,可以通过三种方式创建 HTTP 响应:

调用render以创建完整响应以发送回浏览器调用redirect_to以向浏览器发送 HTTP 重定向状态代码调用head以创建仅包含 HTTP 标头的响应以发送回浏览器layout选项

在 Ruby on Rails 中,layout选项用于指定要用于呈现视图的布局文件。布局文件通常包含页面的共同元素,如页眉、页脚、导航栏等,可以在多个视图中重复使用,从而提高代码复用性和可维护性。

具体来说,如果你想在控制器方法中使用一个名为 application的布局文件来呈现视图,可以使用以下代码:

def show  @post = Post.find(params[:id])  render :show, layout: "application"end

在这个例子中,render :show表示要呈现名为 show的视图模板,而 layout: "application"表示要使用名为 application的布局文件来包装视图内容。控制器方法使用 render方法来呈现视图和布局,生成最终的响应。

如果不指定 layout选项,则默认使用名为 application的布局文件。如果你想在某个视图中禁用布局,可以使用 layout: false选项,如下所示:

def index  @posts = Post.all  render layout: falseend

在这个例子中,render layout: false表示不使用任何布局文件来呈现视图内容。控制器方法使用 render方法来呈现视图,生成最终的响应。

总之,layout选项可以方便地指定要用于呈现视图的布局文件,或者禁用布局。对于具有共同元素的页面,使用布局文件可以提高代码复用性和可维护性,从而更有效地开发应用程序。

status选项

在 Ruby on Rails 中,status选项是用于指定 HTTP 响应状态码的选项。HTTP 状态码是用于指示服务器对请求的处理结果的标准化代码,例如,200 表示请求成功,404 表示请求的资源不存在等等。

在控制器方法中,可以使用 render方法的 status选项来指定要返回的 HTTP 状态码。例如,下面的代码演示了如何在控制器方法中使用 status选项来返回 404 状态码:

def not_found  render plain: "404 Not Found", status: 404end

在这个例子中,render plain: "404 Not Found", status: 404表示要返回一个纯文本响应,内容为 "404 Not Found",并且状态码为 404。当客户端访问这个控制器方法时,服务器将返回一个带有 404 状态码的响应。

使用 status选项可以方便地指定要返回的 HTTP 状态码,从而更好地指示服务器对请求的处理结果。在实际应用中,通常会使用一些预定义的状态码,如 200、401、404、500 等等,以便客户端能够更好地理解服务器对请求的处理结果。

总之,在 Ruby on Rails 中,status选项是用于指定 HTTP 响应状态码的选项,通常与 render方法一起使用。它可以方便地指定要返回的状态码,以便更好地指示服务器对请求的处理结果。

formats选项

在 Ruby on Rails 中,formats选项是用于指定响应格式的选项。响应格式是指服务器返回给客户端的数据格式,例如 HTML、JSON、XML 等等。

在控制器方法中,可以使用 render方法的 formats选项来指定要返回的响应格式。例如,下面的代码演示了如何在控制器方法中使用 formats选项来返回 JSON 格式的响应:

def show  @user = User.find(params[:id])  render json: @user, formats: :jsonend

在这个例子中,render json: @user, formats: :json表示要返回一个 JSON 格式的响应,其中的 formats: :json选项指定了要返回的响应格式为 JSON。当客户端访问这个控制器方法时,服务器将返回一个包含用户数据的 JSON 格式的响应。

使用 formats选项可以方便地指定要返回的响应格式,以便服务器返回正确的数据格式。在实际应用中,通常会根据客户端的请求格式来动态地选择要返回的响应格式,从而提高应用的灵活性和可扩展性。

总之,在 Ruby on Rails 中,formats选项是用于指定响应格式的选项,通常与 render方法一起使用。它可以方便地指定要返回的响应格式,以便服务器返回正确的数据格式。

variants选项

在 Ruby on Rails 中,variants选项是用于指定响应变体的选项。响应变体是指根据客户端的请求属性(如语言、设备类型等)生成的不同版本的响应。

在控制器方法中,可以使用 respond_to方法的 variants选项来指定要生成的响应变体。例如,下面的代码演示了如何在控制器方法中使用 variants选项来生成适合不同设备类型的响应:

def index  @articles = Article.all  respond_to do |format|    format.html    format.json    format.turbo_stream    format.variant :phone do      render "index.phone"    end  endend

在这个例子中,respond_to方法包含了三种默认的响应格式(HTML、JSON 和 Turbo Stream),以及一个使用 variant选项生成的响应变体。当客户端通过手机访问这个控制器方法时,服务器将返回 index.phone视图模板对应的 HTML 响应。

使用 variants选项可以方便地为不同设备类型生成适合的响应,并提供更好的用户体验。在实际应用中,通常会根据客户端的请求属性和应用的需求来动态地生成响应变体,从而提高应用的可用性和可扩展性。

总之,在 Ruby on Rails 中,variants选项是用于指定响应变体的选项,通常与 respond_to方法一起使用。它可以方便地为不同设备类型生成适合的响应,并提供更好的用户体验。

查找布局

在 Ruby on Rails 中,布局是用于组织视图模板的共享代码的机制。每个控制器都可以有一个默认布局,也可以在控制器方法中通过 layout方法指定使用特定的布局。

布局通常位于 app/views/layouts目录下,以 .html.erb.html.haml等格式的文件存在。当视图模板渲染时,布局文件会自动被加载,并将视图模板的内容嵌入其中指定的位置。

在查找布局时,Rails 会按照以下顺序搜索布局文件:

首先,Rails 将查找与控制器名称相同的布局文件。例如,如果当前控制器的名称为 PostsController,则 Rails 将查找名为 posts.html.erbposts.html.haml等格式的布局文件。

如果没有找到与控制器名称相同的布局文件,则 Rails 将查找名为 application.html.erbapplication.html.haml等格式的布局文件。这是默认的布局文件,适用于所有控制器和视图。

如果以上两种情况都没有找到布局文件,则 Rails 将不使用布局,直接将视图模板的内容返回给客户端。

在控制器方法中,可以使用 layout方法来指定要使用的布局文件。例如,下面的代码演示了如何在控制器方法中使用 layout方法来指定要使用名为 admin的布局文件:

class Admin::UsersController < ApplicationController  layout "admin"  def index    # ...  endend

在这个例子中,layout "admin"表示要使用名为 admin的布局文件来渲染该控制器方法对应的视图模板。

总之,在 Ruby on Rails 中,布局是用于组织视图模板的共享代码的机制。Rails 会按照一定顺序查找布局文件,并自动将视图模板的内容嵌入其中指定的位置。可以使用 layout方法来指定要使用的布局文件。

为控制器指定布局

在 Ruby on Rails 中,可以为控制器指定默认的布局,以便在渲染视图模板时自动应用该布局。默认情况下,Rails 会使用名为 application.html.erbapplication.html.haml的布局文件作为所有控制器的默认布局。

要为控制器指定不同的布局,可以在控制器类中使用 layout方法来指定要使用的布局文件。例如,假设我们有一个名为 PostsController的控制器,我们可以在该控制器中指定要使用的布局文件:

class PostsController < ApplicationController  layout "posts_layout"  def index    # ...  end  def show    # ...  endend

在这个例子中,layout "posts_layout"表示要使用名为 posts_layout的布局文件作为该控制器的默认布局。当该控制器的 indexshow方法渲染视图模板时,将自动应用该布局。

除了在控制器类中使用 layout方法指定默认布局外,还可以在控制器方法中使用 render方法的 layout选项来指定要使用的布局文件。例如,下面的代码演示了如何在控制器方法中使用 layout选项来指定要使用名为 dashboard_layout的布局文件:

def dashboard  @user = current_user  render layout: "dashboard_layout"end

在这个例子中,render layout: "dashboard_layout"表示要使用名为 dashboard_layout的布局文件来渲染该控制器方法对应的视图模板。

总之,在 Ruby on Rails 中,可以为控制器指定默认的布局,以便在渲染视图模板时自动应用该布局。可以在控制器类中使用 layout方法或在控制器方法中使用 render方法的 layout选项来指定要使用的布局文件。

在运行时选择布局

在 Ruby on Rails 中,可以在运行时根据应用程序的需求选择要使用的布局。这通常是根据用户的角色、设备类型或其他条件来动态选择布局的。

要在运行时选择布局,可以在控制器方法中使用 render方法的 layout选项,并将其设置为一个方法名或一个 lambda 表达式。例如,下面的代码演示了如何在控制器方法中使用 lambda 表达式来动态选择布局:

def show  @post = Post.find(params[:id])  render layout: -> {    if current_user.admin?      "admin_layout"    else      "application"    end  }end

在这个例子中,render layout: -> { ... }表示将 layout选项设置为一个 lambda 表达式,该 lambda 表达式根据当前用户是否为管理员来选择要使用的布局。如果当前用户是管理员,则使用名为 admin_layout的布局文件,否则使用默认的 application布局文件。

除了使用 lambda 表达式来动态选择布局外,还可以定义一个方法来执行相同的逻辑,并将其作为 layout选项的值。例如:

def show  @post = Post.find(params[:id])  render layout: choose_layoutendprivatedef choose_layout  if current_user.admin?    "admin_layout"  else    "application"  endend

在这个例子中,choose_layout方法根据当前用户是否为管理员来选择要使用的布局,并将其作为 layout选项的值传递给 render方法。

总之,在 Ruby on Rails 中,可以在运行时根据应用程序的需求选择要使用的布局。可以使用 lambda 表达式或定义一个方法来执行相应的逻辑,并将其作为 layout选项的值传递给 render方法。

布局继承

在 Ruby on Rails 中,布局可以通过继承来实现代码的重用和分离。这意味着一个布局可以继承另一个布局,并且子布局可以覆盖父布局中的内容或添加新的内容。

要实现布局继承,可以在布局文件中使用 yield方法来指定子视图模板嵌入布局中的位置。然后,在子视图模板中,可以使用 content_for方法来定义要嵌入到父布局中的内容。例如,假设我们有一个名为 application.html.erb的默认布局文件:

  My Application  <%= stylesheet_link_tag    "application", media: "all" %>  <%= javascript_include_tag "application" %>  <%= csrf_meta_tags %><%= yield %>

在这个例子中,yield方法表示子视图模板的内容将嵌入到 标签中。

现在,假设我们想要为特定的控制器或视图创建一个自定义布局,并从默认布局中继承一些内容。我们可以创建一个名为 posts.html.erb的布局文件,并在其中指定要继承的布局文件,如下所示:

<% content_for :head do %>  <% end %><% content_for :content do %>  <%= yield %><% end %><%= render template: "layouts/application" %>

在这个例子中,content_for方法表示要嵌入到父布局中的内容。我们定义了两个 content_for块,一个用于添加自定义的 标签到 中,另一个用于嵌入子视图模板的内容。然后,我们使用 render方法来渲染默认的 application.html.erb布局,并将其包含在子布局中。

通过这种方式,我们可以创建一个自定义布局,并从默认布局中继承一些内容。在子视图模板中,我们可以使用 content_for方法来添加要嵌入到父布局中的内容。

总之,在 Ruby on Rails 中,可以使用布局继承来实现代码的重用和分离。可以在布局文件中使用 yield方法来指定子视图模板嵌入布局中的位置,并在子视图模板中使用 content_for方法来定义要嵌入到父布局中的内容。

假设你有一个名为“应用程序”的 Ruby on Rails 应用程序,并且你想要创建一个包含头部和脚部的默认布局,以及一个特定于“欢迎”页面的子布局。你可以按照以下步骤进行操作:

创建默认布局文件 app/views/layouts/application.html.erb,并将所有共同部分放在其中:
  应用程序

应用程序

<%= yield %>

© 2023 应用程序

在这个例子中,yield方法表示子视图模板的内容将嵌入到

标签中。

创建一个特定于“欢迎”页面的子布局文件 app/views/layouts/welcome.html.erb,并继承默认布局文件,并使用 content_for方法添加特定于子布局的内容:
<% content_for :title do %>    欢迎 - 应用程序<% end %><% content_for :main do %>    

欢迎来到应用程序!

这是一个演示 Ruby on Rails 应用程序。

<% end %><%= render template: "layouts/application" %>

在这个例子中,我们使用 content_for方法分别定义了 :title:main块,用于添加特定于子布局的标题和欢迎信息。然后,我们使用 render方法来渲染默认的 application.html.erb布局,并将其包含在子布局中。

创建一个特定于“欢迎”页面的视图文件 app/views/welcome/index.html.erb,并使用 content_for方法填充子布局中的块:
<% content_for :main do %>    

欢迎来到应用程序!

这是一个演示 Ruby on Rails 应用程序。

这是欢迎页面的内容。

<% end %>

在这个例子中,我们使用 content_for方法在视图文件中填充了子布局中的 :main块,添加了欢迎页面的内容。

通过这样的方式,你可以创建一个具有共同部分的默认布局,并从中继承特定于页面的子布局,并在视图文件中填充子布局中的块。这样就可以实现代码的重用和分离。

模板继承

在 Rails 中,可以使用模板继承来避免重复的代码,并更好地组织视图。具体来说,你可以创建一个基础模板,包含网页的通用结构和元素,然后在其他模板中继承它并添加特定的内容。

以下是一个简单的例子,演示如何在 Rails 中使用模板继承:

首先,创建一个名为 application.html.erb的基础模板,如下所示:

  My App  <%= stylesheet_link_tag "application", media: "all" %>  <%= javascript_include_tag "application" %>  <%= csrf_meta_tags %>  

My App

<%= yield %>
© My App <%= Time.current.year %>

在这个例子中,基础模板包含一个顶部导航栏和一个底部版权信息,还包括一个名为 yield的占位符,用于在继承模板中插入内容。

接下来,创建一个名为 home.html.erb的继承模板,如下所示:

<% content_for :title do %>  Home<% end %>

Welcome to My App

This is the home page.

在这个例子中,继承模板包含一个标题和一些文本内容,它继承了基础模板并添加了特定的内容。

最后,创建一个名为 about.html.erb的继承模板,如下所示:

<% content_for :title do %>  About<% end %>

About My App

This is the about page.

在这个例子中,继承模板包含一个标题和一些文本内容,它也继承了基础模板并添加了特定的内容。

现在,在浏览器中访问这些页面时,Rails 将使用基础模板中的通用结构和元素,并使用继承模板中的特定内容来渲染页面。你还可以在继承模板中使用 content_for方法来定义标题和其他占位符,以便在基础模板中设置。

总之,在 Rails 中,使用模板继承可以帮助你更好地组织视图,避免重复的代码,并提高代码的可维护性。

使用redirect_to

在 Rails 中,redirect_to方法用于将用户重定向到另一个 URL。它通常用于在控制器动作中执行一些操作后,将用户重定向到不同的页面。以下是一个简单的例子:

class UsersController < ApplicationController  def create    @user = User.new(user_params)    if @user.save      redirect_to @user    else      render "new"    end  endend

在这个例子中,create动作创建一个新的用户,并尝试将其保存到数据库中。如果保存成功,用户将被重定向到用户详情页面。如果保存失败,用户将被重定向回用户创建页面。

redirect_to方法可以接受多种参数,包括 URL、路径、路由助手、模型实例等。下面是一些常见的用法:

重定向到 URL:
redirect_to "https://www.example.com"
重定向到路径:
redirect_to "/users"
重定向到路由助手:
redirect_to users_path
重定向到模型实例:
redirect_to @user

在这个例子中,Rails 将使用 user_path(@user)路由助手生成用户详情页面的 URL。

除了指定重定向目标外,redirect_to方法还可以接受可选参数,用于指定重定向的类型、状态码、提示信息等。例如:

redirect_to @user, notice: "User was successfully created."

在这个例子中,Rails 将使用 user_path(@user)路由助手生成用户详情页面的 URL,并将一个名为 "notice" 的参数传递给目标页面。

总之,在 Rails 中,redirect_to方法是一个非常有用的工具,可以帮助你将用户重定向到不同的页面,并传递相关信息。

获取不同的重定向状态码

在 Rails 中,redirect_to方法默认使用 302 Found 状态码进行重定向,这意味着重定向的页面是暂时性的,并且浏览器会向新的页面发出 GET 请求。但是,有时候你可能需要使用不同的重定向状态码,以便更好地控制重定向行为。

以下是一些常见的重定向状态码和它们的含义:

301 Moved Permanently:指示请求的资源已永久移动到新位置,以后应该使用新的 URL。302 Found (默认值):指示请求的资源已暂时移动到新位置,浏览器应该使用新的 URL 进行请求。303 See Other:指示请求的资源可以在另一个 URL 中找到,应该使用 GET 方法进行请求。307 Temporary Redirect:指示请求的资源已暂时移动到新位置,浏览器应该使用原始请求的方式进行请求。308 Permanent Redirect:指示请求的资源已永久移动到新位置,以后应该使用新的 URL。

要使用不同的重定向状态码,可以将状态码作为 redirect_to方法的第二个参数传递。例如,要使用 301 Moved Permanently 状态码进行重定向,可以这样写:

redirect_to new_url, status: 301

在这个例子中,new_url是你要重定向到的新 URL,而 status: 301则表示要使用 301 Moved Permanently 状态码进行重定向。

除了使用数字状态码之外,Rails 还提供了一些常量,可以更方便地指定常见的状态码。例如,要使用 303 See Other 状态码进行重定向,可以这样写:

redirect_to new_url, status: :see_other

在这个例子中,:see_other是一个常量,表示 303 See Other 状态码。

总之,在 Rails 中,使用不同的重定向状态码可以帮助你更好地控制重定向行为,并提高用户体验。

render和的区别redirect_to

renderredirect_to是 Rails 中两个常用的控制器方法,它们都用于返回响应给用户,但是它们的作用和用法有所不同。

render方法用于渲染视图模板,并将其作为响应发送给用户。它通常在控制器动作中执行一些操作后,将结果呈现给用户。例如:

def show  @user = User.find(params[:id])  render :showend

在这个例子中,show动作查询一个用户,并将其赋值给 @user变量。然后,它通过 render方法将 show.html.erb视图模板渲染成 HTML,最终将其作为响应发送给用户。

redirect_to方法用于将用户重定向到另一个 URL。它通常在控制器动作中执行一些操作后,将用户重定向到不同的页面。例如:

def create  @user = User.new(user_params)  if @user.save    redirect_to @user  else    render :new  endend

在这个例子中,create动作创建一个新的用户,并尝试将其保存到数据库中。如果保存成功,用户将被重定向到用户详情页面。如果保存失败,用户将被重定向回用户创建页面。

因此,renderredirect_to的主要区别在于它们的作用和用法不同。render用于呈现视图,而 redirect_to用于将用户重定向到不同的页面。在使用它们时,你需要根据你的需求选择正确的方法,以便实现你的业务逻辑。

用于head构建仅标头响应

在 Rails 中,可以使用 head方法来构建仅包含标头的响应。这个方法常常用于在控制器中处理 AJAX 请求或者其他需要返回空响应的场景中。

head方法接受两个参数:第一个参数表示响应的状态码,第二个参数表示响应的标头。如果不需要设置标头,第二个参数可以省略。例如,要返回一个 200 OK 状态码的空响应,可以这样写:

head :ok

在这个例子中,head方法构建了一个只包含状态码的响应,并将其发送给客户端。

除了 :okhead方法还支持其他常见的状态码,例如 :created:unprocessable_entity:not_found等等。你也可以使用数字状态码来构建响应,例如 head 404表示返回一个 404 Not Found 状态码的响应。

如果你需要设置标头,可以将标头信息作为哈希参数传递给 head方法。例如,要返回一个包含自定义标头的 200 OK 响应,可以这样写:

head :ok, "X-Request-Id" => "123"

在这个例子中,第二个参数是一个哈希,它包含一个名为 X-Request-Id的自定义标头。当客户端收到响应时,它将包含这个自定义标头。

总之,head方法是一个快速简便的方法,用于构建仅包含标头的响应。在处理 AJAX 请求或其他需要返回空响应的场景中,它非常有用。

结构布局

在 Rails 中,结构布局(Stuctured Layouts)是一种常用的组织视图模板的方式。与传统的布局不同,结构布局使用嵌套的视图模板来组织页面内容,这样可以更灵活地构建复杂的页面。

结构布局基于以下两个核心概念:

yield方法:用于在布局中插入视图模板的内容。

content_for方法:用于在视图模板中定义可以在布局中使用的内容块。

通过这两个方法的结合使用,可以实现在布局和视图模板之间更加灵活的组织方式。

下面是一个简单的例子,展示了如何创建一个包含结构布局的 Rails 应用:

首先,在 app/views/layouts目录下创建一个名为 application.html.erb的文件,用于定义应用程序的默认布局。这个文件通常包含一个 HTML 头部和尾部,以及一个 yield方法,用于插入视图模板的内容:
      My App        <%= yield %>  
然后,在视图模板中,可以使用 content_for方法定义一个或多个内容块,例如:
<% content_for :sidebar do %>  

My Sidebar

This is my awesome sidebar.

<% end %>

My Page

This is my awesome page.

在这个例子中,content_for :sidebar定义了一个名为 :sidebar的内容块,其中包含一个标题和一些文本内容。<%= yield %>将会在应用布局中插入这个内容块。

最后,在布局中,可以使用 yield方法来插入视图模板的内容,并使用 content_for方法来插入视图模板中定义的内容块,例如:
      My App            
<%= yield %>

在这个例子中,布局将视图模板的内容插入到一个名为 :content的内容块中,并使用 content_for?(:sidebar)来检查视图模板中是否定义了 :sidebar的内容块。如果存在,布局将使用 yield(:sidebar)将其插入到布局中的侧边栏区域中。

总之,结构布局是一种灵活的组织视图模板的方式,在构建复杂的页面时非常有用。通过使用 yieldcontent_for方法,可以更加灵活地组织页面内容,并将布局和视图模板分离开来,使应用程序更具可维护性和可扩展性。

这里是几个常用的 Rails 辅助方法,用于在视图模板中生成 HTML 标签:

auto_discovery_link_tag:用于在 HTML 页面头部添加自动发现链接标签,以便浏览器可以自动发现页面的 RSS 或 Atom 提要auto_discovery_link_tag是一个 Rails 辅助方法,用于在 HTML 页面头部添加自动发现链接标签,以便浏览器可以自动发现页面的 RSS 或 Atom 提要。这个方法通常在布局文件中使用,以便将自动发现链接标签添加到每个页面的头部。

在 Rails 中,可以使用以下方式来使用 auto_discovery_link_tag

<%= auto_discovery_link_tag(:rss, feed_url) %><%= auto_discovery_link_tag(:atom, feed_url) %>

在这个例子中,auto_discovery_link_tag接受两个参数。第一个参数表示提要的类型,可以是 :rss:atom。第二个参数表示提要的 URL,通常是一个指向包含提要内容的 URL。

当这个方法被调用时,它会生成一个自动发现链接标签,并将其添加到页面头部。例如,如果你在布局文件中添加了这两行代码,并且 feed_url变量包含了一个指向你的 RSS 或 Atom 提要的 URL,那么 Rails 将会为每个页面添加下面这些标签:

这些标签告诉浏览器,页面包含一个或多个提要,并提供了一个指向提要内容的 URL。浏览器可以利用这些标签自动发现并订阅提要内容,使用户可以更方便地跟踪网站的更新。

总之,auto_discovery_link_tag是一个方便的 Rails 辅助方法,用于向 HTML 页面添加自动发现链接标签。在使用提要的网站中,这个方法可以提供更好的用户体验,使用户可以更方便地跟踪网站的更新。

javascript_include_tag:用于在 HTML 页面中引入 JavaScript 文件。可以接受一个或多个文件名作为参数,并生成对应的 <script>标签。例如:

<%= javascript_include_tag "application" %>

这个方法将会生成一个指向 app/assets/javascripts/application.js文件的 <script>标签。如果你需要引入多个文件,可以在参数中列出它们的文件名,例如:

<%= javascript_include_tag "jquery", "application" %>

这个方法将会生成两个 <script>标签,分别指向 app/assets/javascripts/jquery.jsapp/assets/javascripts/application.js文件。

stylesheet_link_tag:用于在 HTML 页面中引入 CSS 文件。与 javascript_include_tag类似,这个方法也可以接受一个或多个文件名作为参数,并生成对应的 标签。例如:
<%= stylesheet_link_tag "application" %>

这个方法将会生成一个指向 app/assets/stylesheets/application.css文件的 标签。如果你需要引入多个文件,可以在参数中列出它们的文件名,例如:

<%= stylesheet_link_tag "bootstrap", "application" %>

这个方法将会生成两个 标签,分别指向 app/assets/stylesheets/bootstrap.cssapp/assets/stylesheets/application.css文件。

image_tag:用于在 HTML 页面中插入图片。可以接受一个图片文件名作为参数,并生成对应的 标签。例如:
<%= image_tag "logo.png" %>

这个方法将会生成一个指向 app/assets/images/logo.png文件的 标签。如果需要设置其他属性,比如 altclass,可以在第二个参数中指定,例如:

<%= image_tag "logo.png", alt: "My Logo", class: "logo" %>
video_tag:用于在 HTML 页面中插入视频。可以接受一个视频文件名作为参数,并生成对应的 标签。例如:
<%= video_tag "my_video.mp4" %>

这个方法将会生成一个指向 app/assets/videos/my_video.mp4文件的 标签。如果需要设置其他属性,比如 controlsautoplay,可以在第二个参数中指定,例如:

<%= video_tag "my_video.mp4", controls: true, autoplay: true %>
audio_tag:用于在 HTML 页面中插入音频。可以接受一个音频文件名作为参数,并生成对应的 标签。例如:
<%= audio_tag "my_audio.mp3" %>

这个方法将会生成一个指向 app/assets/audios/my_audio.mp3文件的 标签。如果需要设置其他属性,比如 controlsautoplay,可以在第二个参数中指定,例如:

<%= audio_tag "my_audio.mp3", controls: true, autoplay: true %>

这些辅助方法是 Rails 非常常用的一部分,它们可以简化视图模板的开发,使开发者可以更方便地生成 HTML 标签。

理解yield

在 Ruby 中,yield是一个非常有用的关键字,可以用于将控制权传递给一个调用方法的代码块(block)。具体来说,当一个方法中包含了 yield关键字时,它会在执行过程中暂停并将控制权传递给调用者传递进来的代码块,然后等待代码块完成后再继续执行。

下面是一个简单的例子,用于说明如何使用 yield

def my_method  puts "Start of method"  yield  puts "End of method"endmy_method do  puts "Inside the block"end

在上面的例子中,my_method定义了一个代码块,其中包含了 yield关键字。当 my_method被调用时,它会执行前两行输出,然后将控制权传递给传递进来的代码块,在代码块中执行输出,然后返回 my_method继续执行最后一行输出。

因此,调用 my_method时将会输出:

Start of methodInside the blockEnd of method

这个例子只是 yield的一种使用方式。实际上,yield可以用于更复杂的情况下,例如传递参数,多次调用代码块等。在 Ruby 中,yield是一个非常强大的工具,可以帮助开发者写出更灵活、更可重用的代码。

使用content_for方法

content_for是 Rails 视图中非常有用的一个方法,它允许我们在视图中定义一个内容块,并在该块中填充任意内容。这样可以使视图文件更加灵活,从而使开发更加高效。

具体来说,content_for方法可以在视图文件中定义一个命名的内容块。例如:

# app/views/layouts/application.html.erb      <%= content_for?(:title) ? yield(:title) : "My App" %>        <%= yield %>  

在上面的代码中,我们定义了一个名为 title的内容块,并在 HTML 的 </code>标签中使用了该块。如果在视图文件中不使用 <code>content_for</code>填充 <code>title</code>块,则默认使用 "My App" 作为标题。</p><p>现在,我们可以在视图文件中调用 <code>content_for</code>方法来填充该块。例如:</p><pre><code class="language-ruby"># app/views/posts/index.html.erb<% content_for :title do %> My Blog<% end %><h1>Welcome to my blog!</h1></code></pre><p>在上面的代码中,我们在 <code>posts/index.html.erb</code>视图文件中使用 <code>content_for</code>来填充 <code>title</code>块。这样,视图文件中的 <code><title></code>标签将会被设置为 "My Blog"。</p><p><code>content_for</code>方法还可以用于填充其他内容块,例如页头、页脚、导航等。使用 <code>content_for</code>方法可以使视图文件更加灵活,从而使我们的 Rails 应用更加易于维护和扩展。</p> <div class="tags">标签: </div> </div> <div class="page_fenye"> </div> <div class="turn_Page"> <p>上一篇:<span><a href="http://www.jingji.nancai.net/yejie/2023/0424/1568.html" target="_blank">【大国基理】行走在村间山头的“背包法庭”</a></span></p> <p>下一篇:<span><a href="http://www.jingji.nancai.net/yejie/2023/0424/1570.html" target="_blank">世界简讯:【明日方舟X心灵终结】(前传----行动记录:心灵暴乱)败退</a></span></p> </div> </div> <div class="recommend_part fl"> <div class="rec_tit"><a href="">为您推荐</a></div> <div class="double"> <ul class="pub_ul fl"> <li> <a href="http://www.jingji.nancai.net/kuaixun/2022/1208/151.html">AR赛道风起云涌,讯晟国际投资俱乐部持续发力</a> <span>2022-12-08</span> </li> <li> <a href="http://www.jingji.nancai.net/kuaixun/2022/1202/148.html">OPPO Reno9系列正式开售,48个月久用流畅!售价2499元起</a> <span>2022-12-02</span> </li> <li> <a href="http://www.jingji.nancai.net/kuaixun/2022/1122/147.html">牵手微盟,家纺新国货南方寝饰构建全时全域智慧零售</a> <span>2022-11-22</span> </li> <li> <a href="http://www.jingji.nancai.net/kuaixun/2022/1102/146.html">小鹏G9获广州自动驾驶路测资格 探索零改装量产Robotaxi新模式</a> <span>2022-11-02</span> </li> <li> <a href="http://www.jingji.nancai.net/kuaixun/2022/1019/145.html">让普惠金融回归“民生”,民生小微“四通”助力小微企业健康发展</a> <span>2022-10-19</span> </li> </ul> <ul class="pub_ul fr"> <li> <a href="http://www.jingji.nancai.net/kuaixun/2022/0919/142.html">聚焦异业联盟,探索私域增长新模式,微盟首届智慧家装节收官</a> <span>2022-09-19</span> </li> <li> <a href="http://www.jingji.nancai.net/yinxing/2022/0719/141.html">杭州发布全国首个放心消费商圈建设标准 打通放心消费“最后一公里”</a> <span>2022-07-19</span> </li> <li> <a href="http://www.jingji.nancai.net/rongzi/2022/0719/140.html">线上线下相结合 世界青年发展论坛7月21日至23日举办</a> <span>2022-07-19</span> </li> <li> <a href="http://www.jingji.nancai.net/rongzi/2022/0719/139.html">新增资助标准60万元!第六届“商的长城”项目发布</a> <span>2022-07-19</span> </li> <li> <a href="http://www.jingji.nancai.net/rongzi/2022/0719/138.html">铲除养老诈骗滋生土壤 广东中山筑牢反诈防线</a> <span>2022-07-19</span> </li> </ul> </div> <ul class="tabs_ul active"> <li class="notImg"> <h1><a href="http://www.jingji.nancai.net/rongzi/2022/0719/137.html" target="_blank">上海全面推进基层快递网点优先参加工伤保险工作 促进快递业持续健康发展</a></h1> <p>近日,上海市人力资源和社会保障局、市邮政管理局联合印发《关于做好本市基层快递网点优先参加工伤保险工作的通知》,全面推进基层快递网点 <span class="."></span> </p> <div class="tabs_meta">来源:      时间:2022-07-19</div> </li> <li class="notImg"> <h1><a href="http://www.jingji.nancai.net/licai/2022/0719/136.html" target="_blank">三元食品与现代牧业成立合资公司 布局奶牛冻精市场</a></h1> <p>7月18日,北京三元食品股份有限公司(以下简称三元食品)发布《关于公司控股子公司首农畜牧与现代牧业设立合资公司的公告》。公告显示,为巩 <span class="."></span> </p> <div class="tabs_meta">来源:      时间:2022-07-19</div> </li> <li class="notImg"> <h1><a href="http://www.jingji.nancai.net/licai/2022/0719/135.html" target="_blank">派特尔将于7月22日在北交所上市 发行市盈率为13.63倍</a></h1> <p>7月19日,派特尔(836871)将于7月22日在北交所上市,同日从新三板摘牌。资料显示,派特尔IPO发行价为5 6元 股,发行市盈率为13 63倍,拟发行 <span class="."></span> </p> <div class="tabs_meta">来源:      时间:2022-07-19</div> </li> <li class="notImg"> <h1><a href="http://www.jingji.nancai.net/licai/2022/0719/134.html" target="_blank">耐看娱乐控股递表港交所主板 曾于2022年首次递交上市申请</a></h1> <p>2022年7月18日,耐看娱乐控股有限公司递表港交所主板,招商证券国际及中泰国际为联席保荐人。公司曾于2022年1月3日首次递交上市申请,但目 <span class="."></span> </p> <div class="tabs_meta">来源:      时间:2022-07-19</div> </li> <li class="notImg"> <h1><a href="http://www.jingji.nancai.net/licai/2022/0719/133.html" target="_blank">赛恩斯回复科创板二轮问询:上交所关注10个问题</a></h1> <p>2022年7月19日,赛恩斯环保股份有限公司(下称赛恩斯)回复科创板IPO二轮问询。在二轮问询中,上交所主要关注赛恩斯运营服务、应收账款、客户 <span class="."></span> </p> <div class="tabs_meta">来源:      时间:2022-07-19</div> </li> </ul> </div> </div> <div class="list_right_part "> <div class="adversiment closed"> <p class="closead">X 关闭</p> </div> <div class="ad1"> <div class="ad_tit"> <h1><a href="http://www.jingji.nancai.net/chanjing/">产经</a></h1> </div> <div class="double_img"> <a href="http://www.jingji.nancai.net/chanjing/2022/0718/5.html"><img alt="" src="http://img.qipei.nancai.net/2022/0718/20220718045035533.jpg"> <p>金花股份:拟设立三家全资子公司 促进公司实现战略目标</p></a> <a href="http://www.jingji.nancai.net/chanjing/2022/0718/4.html"><img alt="" src="http://img.qipei.nancai.net/2022/0718/20220718044722843.jpg"> <p>葛兰素史克:公司股东投票赞成分拆消费者医疗保健业务</p></a> </div> <ul> <li><a href="http://www.jingji.nancai.net/chanjing/2022/0718/3.html" target="_blank">桃李面包:2022年半年度净利润3.57亿元 同比下降3%</a></li> <li><a href="http://www.jingji.nancai.net/chanjing/2022/0718/2.html" target="_blank">唐山港拟实施河北省港口资源整合 组建河北渤海港口集团</a></li> </ul> </div> <div class="adversiment closed"> <p class="closead">X 关闭</p> </div> <div class="ad1"> <div class="ad_tit"> <h1><a href="http://www.jingji.nancai.net/yejie/">业界</a></h1> </div> <div class="ad1_text_con notImg"> <div> <a href="http://www.jingji.nancai.net/yejie/2023/0424/1570.html" target="_blank">世界简讯:【明日方舟X心灵终结】(前传----行动记录:心灵暴乱)败退</a> <span>2023-04-24</span> </div> </div> <ul> <li><a href="http://www.jingji.nancai.net/yejie/2023/0424/1569.html" target="_blank">Rails 中的布局和渲染</a></li> <li><a href="http://www.jingji.nancai.net/yejie/2023/0424/1568.html" target="_blank">【大国基理】行走在村间山头的“背包法庭”</a></li> <li><a href="http://www.jingji.nancai.net/yejie/2023/0424/1567.html" target="_blank">【报资讯】金巧福黄金价格今天多少一克(2023年04月24日)</a></li> <li><a href="http://www.jingji.nancai.net/yejie/2023/0424/1566.html" target="_blank">全球快资讯丨威海到大连船票_威海到大连的船票时刻表</a></li> <li><a href="http://www.jingji.nancai.net/yejie/2023/0424/1565.html" target="_blank">每日动态!空洞骑士假骑士怎么打-假骑士攻略</a></li> <li><a href="http://www.jingji.nancai.net/yejie/2023/0424/1564.html" target="_blank">康拓红外(300455)4月24日主力资金净买入669.53万元 当前热门</a></li> <li><a href="http://www.jingji.nancai.net/yejie/2023/0424/1563.html" target="_blank">美国得州派对枪击致9名青少年受伤-环球热资讯</a></li> <li><a href="http://www.jingji.nancai.net/yejie/2023/0424/1562.html" target="_blank">焦点关注:IDC:2022下半年中国视频云市场规模达到49.8亿美元</a></li> <li><a href="http://www.jingji.nancai.net/yejie/2023/0424/1561.html" target="_blank">识好人、做好人、帮好人,金山正在打造“好人文化”!-环球视点</a></li> </ul> </div> <div class="ad1"> <div class="ad_tit"> <h1><a href="http://www.jingji.nancai.net/caijing/">财经</a></h1> </div> <div class="double_img"> <a href="http://www.jingji.nancai.net/caijing/2022/0718/25.html"><img alt="" src="http://img.qipei.nancai.net/2022/0718/20220718095042598.jpg"> <p>喜临门:控股股东华瀚投资质押1200万股用于日常经营</p></a> <a href="http://www.jingji.nancai.net/caijing/2022/0718/24.html"><img alt="" src="http://img.qipei.nancai.net/2022/0718/20220718094819248.jpg"> <p>德昌股份拟合计投资400万设立两家全资子公司 提升经营效益</p></a> </div> <div class="double_img"> <a href="http://www.jingji.nancai.net/caijing/2022/0718/23.html"><img alt="" src="http://img.qipei.nancai.net/2022/0718/20220718094544788.jpg"> <p>银宝山新:股东质押1500万股用于经营需要</p></a> <a href="http://www.jingji.nancai.net/caijing/2022/0718/22.html"><img alt="" src="http://img.qipei.nancai.net/2022/0718/20220718094221348.jpg"> <p>南京市工商联举办“助力中小微携手共发展”主题活动</p></a> </div> </div> <div class="ad1"> <div class="ad_tit"> <h1><a href="http://www.jingji.nancai.net/shanghui/">商会</a></h1> </div> <div class="news_ad1"> <a href="http://www.jingji.nancai.net/shanghui/2022/0718/38.html"> <div class="ihg-ctr"><h1>科创板未果改道创业板 慧翰股份创业板IPO获受理<i></i></h1> <p>作为国脉科技(002093)的实控人之一,陈国鹰欲再推旗下企业慧翰微电子股份有限公司(以下简称慧翰股份)上市,该公司此前科创板IPO曾走到注册<span class="more">[+更多]</span></p></div> </a> <a href="http://www.jingji.nancai.net/shanghui/2022/0718/37.html"> <div class="ihg-ctr"><h1>上交所:对威龙股份有关责任人予以监管警示<i></i></h1> <p>7月18日,上海证券交易所(以下简称上交所)在官网发布关于对威龙葡萄酒股份有限公司及有关责任人予以监管警示的决定称,经查明,威龙葡萄酒<span class="more">[+更多]</span></p></div> </a> <a href="http://www.jingji.nancai.net/shanghui/2022/0718/36.html"> <div class="ihg-ctr"><h1>“出清”中融基金51%全部股权 “信托系”公募基金阵营缩减<i></i></h1> <p>信托系公募基金的团队阵营正在缩减。7月18日,来自全国产权行业信息化综合服务平台发布的信息显示,中融信托以底价约15 04亿元的价格公开挂<span class="more">[+更多]</span></p></div> </a> <a href="http://www.jingji.nancai.net/shanghui/2022/0718/35.html"> <div class="ihg-ctr"><h1>福石控股:股东质押1700万股用于自身资金需求<i></i></h1> <p>7月18日,福石控股(证券代码:300071)控股股东杭州福石资产管理有限公司向台州金控资产管理有限公司质押股份1700万股,用于自身资金需求。<span class="more">[+更多]</span></p></div> </a> </div> </div> </div> </div> <!-- footer --> <footer id="footer"> <div class="container"> <div class="banquan"> <p>Copyright ©  2015-2022 南方经济网版权所有  备案号:<a href="https://beian.miit.gov.cn/">粤ICP备18023326号-21</a>   联系邮箱:855 729 8@qq.com</p> </div> </div> </footer> <script> (function () { var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp , s); })(); </script> <script charset="UTF-8" language="javascript" src="//data.dzxwnews.com/a.php"></script> <div class="goTop"></div> <script> let oimg = document.querySelectorAll('img'); for (var i = 0; i < oimg.length; i++) { oimg[i].setAttribute("onerror" , "this.src='http://www.jingji.nancai.net/static/images/notfound.jpg'") } </script> <script src="http://www.jingji.nancai.net/static/js/jquery.js"></script> <script src="http://www.jingji.nancai.net/static/js/index.js"></script> </body> </html>