在创建表条目之前处理表单数据

时间:2013-08-18 20:01:01

标签: ruby-on-rails-3 forms

Backstory:我正在构建一个网站,它将Soundcloud URL作为帖子的一部分。目前,我存储了他们提供的链接,当用户加载他们的Feed视图时,我通过我的post_helper检索关联的图像/标题/收藏计数等。我很快就意识到这不可扩展,并且会影响加载时间。

所以,我认为我应该做的(随意告诉我有更好的方法),就是在表单提交中检索SC / YT元数据并将其与其他发布数据一起存储(id,user,内容等)在帖子的表格中。我如何调用帮助器方法来检索表单上的提交并将元数据包含在提交的参数中?

post_helper.rb摘录:

def soundcloud_info(soundcloud_url, type)  
    begin
        resolve = scClient.get('/resolve', :url => soundcloud_url)
        track_info = scClient.get("/tracks/#{resolve.id}")
    rescue Soundcloud::ResponseError => e
        %Q{ Error: #{e.message}, Status Code: #{e.response.code} }
    end                 
    if type == "title"
        %Q{#{track_info['title']}}
    elsif type == "image"
        %Q{#{track_info['artwork_url']}}
    elsif type == "favCount"
        %Q{Favorite count: #{track_info['favoritings_count']}}              
    end
end

post_controler.rb摘录:

  def create
    @post = current_user.posts.build(params[:post])
    if @post.save
      flash[:success] = "Your post was successful!"
      redirect_to root_url
    else
      @feed_items = current_user.feed.paginate(page: params[:page])
      render 'static_pages/home'
    end
  end

1 个答案:

答案 0 :(得分:0)

所以显然它很直接......我需要做的就是在调用@post = current_user.posts.build(params [:post])之前修改 controller 中的参数。我的问题是我试图在帮手中这样做。

我还没有完全适应所有我需要的字段,但这里有一个例子,说明如果有人提交SoundCloud的嵌入iframe,我如何调整create方法来拉出api URL。

micropost_controller.rb摘录:

def create
  @url = params[:post][:link_html]

  if @url[/^.*src="(https|http):\/\/w.soundcloud.com\/player\/\?url=(.*)">/] 
    params[:post][:link_html] = CGI::unescape($2)
  end

  @post = current_user.posts.build(params[:post])
  if @post.save
    flash[:success] = "Your post was successful!"
    redirect_to root_url
  else
    @feed_items = current_user.feed.paginate(page: params[:page])
    render 'static_pages/home'
  end
end