0

我试图在一个控制器的 create 方法中创建一个实例变量,然后在另一个控制器的视图中使用它。这可能吗?

我正在创建@content变量MicropostsController

class MicropostsController < ApplicationController
  before_filter :signed_in_user, only: [:create, :destroy]
  before_filter :correct_user, only: :destroy

  def create
    @micropost = current_user.microposts.build(params[:micropost])
    @content = 'test' #params[:micropost][:content]
    #pattern = /\A@\w+/

    #if params[:micropost][:content] =~ pattern
     # @content = params[:micropost][:content]
    #end

    if @micropost.save
      flash[:success] = "Micropost created!"
      redirect_to root_path
    else
      @feed_items = []
      render 'static_pages/home'
    end
  end

我正在尝试在类视图中使用的部分中使用它,StaticPages但它不起作用:

<li id="<%= feed_item.id %>">
  <%= link_to gravatar_for(feed_item.user), feed_item.user %>
  <span class="user">
      <%= link_to feed_item.user.name, feed_item.user %>
  </span>
  <span class="content"><%= feed_item.content %></span>
  <span class="timestamp">
    Posted <%= time_ago_in_words(feed_item.created_at) %> ago.
    <% if @content %>
      <%= @content %>
    <% else %>
      <%= 'no content' %>
    <% end %>
  </span>
  <% if current_user?(feed_item.user) %>
    <%= link_to "delete", feed_item, method: :delete,
                data: { confirm: "You sure?" },
                title: feed_item.content %>
  <% end %>
</li>
4

3 回答 3

0

我认为您的问题与在不同控制器的视图中使用实例变量无关,而是在部分使用实例变量:

您可以在由调用 Controller@content呈现的视图中使用实例变量。static_pages/home但是您不能在部分中使用实例变量。您需要将其作为局部变量提供,并将其用作局部变量。有几种语法可以在局部变量中传递局部变量,请参阅Rails guide on layouts and rendering 3.4.4中的示例。

在您发布的代码中,feed_item很可能是您的局部变量这样的局部变量。

于 2012-09-01T17:57:56.800 回答
0

如果两种方法一个接一个,则将其放入数据库中,或者使用 flash its ..

于 2012-09-01T17:37:45.877 回答
0

您不能在另一个控制器的视图中使用在一个控制器中设置的实例变量。您需要在 StaticPagesController 中设置它,或者您可以使用帮助程序。

这可能会有所帮助:Rails:跨多个控制器操作设置一个公共实例变量

于 2012-09-01T17:42:33.090 回答