【问题标题】:Rails | let use input data on view without ever storing the data导轨 |让在视图上使用输入数据而不存储数据
【发布时间】:2015-10-28 10:58:20
【问题描述】:

我在玩 twitter gem 时遇到了以下问题

这是我非常简单的观点,它的唯一目的是从给定的 Twitter 句柄返回前 20 条推文。

home.html.erb

<%@client.user_timeline("BU_Tweets").each do |tweet|%>
    <p><%= tweet.text%></p>
<% end %>

有没有办法让我在同一页面本身上创建某种形式,它会询问用户“请输入推特句柄:”,将该词保存在变量中,然后使用变量像这样:

<%@client.user_timeline(#{twitter_handle}).each do |tweet|%>
    <p><%= tweet.text%></p>
<% end %> 

我不明白为什么我需要创建一个完整的模型来存储这些单词。

我搜索了一下,似乎大多数人都推荐 javascript。我不知道任何 javascript,所以我想知道是否有 Ruby/Rails 方法来解决这个问题?

【问题讨论】:

  • 据我所知,您实际上是在尝试模仿异步行为而不实际使用 javascript(这是一个读取标志)。执行此操作的“rails 方式”将是执行您要避免的两种方法之一:javascript(最佳)或使用数据库。您也许可以结合attr_accessor 创建一个虚拟字段,一个可以接受该字段结果作为参数的自定义路由,然后弄清楚如何将attr_accessor 字符串吐到您的update method. 这是,但绝对不是“铁路方式”,也不可取。

标签: ruby-on-rails


【解决方案1】:

如果您不想使用 javascript,则需要在用户提交表单后刷新整个页面。有一个类似这样的表格:

<%= form_tag <some_url> do %>
  <%= text_field_tag 'handle' %>
  <%= hidden_field_tag 'client', @client %>
<%= submit_tag 'Submit' %>

路由some_urlsome_controller#some_action

def some_action
  @client = #however you're getting @client
  @timelime = @client.user_timeline(params[:handle])
  #render the original page
end

然后在那个页面上做:

<% @timeline.each do |tweet|%>
  <p><%= tweet.text%></p>
<% end %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    相关资源
    最近更新 更多