在另一个视图中使用实例变量

时间:2012-09-01 17:28:26

标签: ruby-on-rails ruby-on-rails-3

我正在尝试在一个控制器的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>

3 个答案:

答案 0 :(得分:0)

要么将它放在数据库中,要么使用flash,如果2个方法是一个接一个..

答案 1 :(得分:0)

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

这可能会有所帮助:Rails: Set a common instance variable across several controller actions

答案 2 :(得分:0)

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

您可以在@content呈现的视图中使用static_pages/home实例变量,无论哪个是调用Controller。但是你不能在局部使用intance变量。您需要将其作为partial的局部变量,并将其用作partial中的局部变量。有几种语法可以在局部变量中传递局部变量,参见Rails guide on layouts and rendering 3.4.4中的示例。

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